oracle04_plsql
PLSQL:Procedural Language SQL
(1)
plsql的基本结构(a)
declare
id constant number(2):=2;--常量定义
name varchar2(10);--变量定义
mysal emp.sal%type;--引用emp表sal列的类型
myrow emp%type; --引用emp表行类型,相当于java中对象,该行类型包含所有列
no_data exception;--异常定义
cursor c1 is select sal from emp;--游标定义,该c1中相当于java中集合,给
cursor c2(dno number) is select sal from emp where deptno=dno;---带参游标定义,该c2相当于java中带泛型集合
no_data exception;
begin
raise no_data;
exception
when no_data then xx;
when others then xx;
end;
创建存储过程语法(b):
create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]
AS
begin
PLSQL子程序体;
End;
或者
create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]
is
begin
PLSQL子程序体;
End 过程名;
(2)循环语句
第1种
for i in 1..100
loop
end loop;
第2种
while
loop
end loop;
第3种
loop
fetch c1 into xx;
exit when xx
end loop;
(3)条件判断语句
if xx then
elsif xx then xx
elsif xx then xx
else xx
end if;
(4)存储过程
第1种:不带参数
create or replace procedure mypro1 as
--这里可以声明变量
begin
end;
第2种:带参数
create or replace procedure mypro2(eno in emp.empno%type,name out varchar2) as
--这里可以声明变量
myrow emp%rowtype;
begin
select * into myrow from emp where empno=eno;
name:=myrow.ename;
end;
调用
execute mypro1;
declare
name varchar2;
begin
mypro2(7369,name);
end;
(5)存储函数
create or replace function myfn1(eno in emp.empno%type) as
return varchar2;
--这里可以声明变量
myrow emp%rowtype;
begin
select * into myrow from emp where empno=eno;
name:=myrow.ename;
return name;
end;
调用:
execute myfn1(7369);
declare
name varchar2;
begin
name:=mypro2(7369);
end;
(6)java api 调用存储过程和存储函数
DriverManager.getConncetion()---Connection---prepareCall
CallableStatement---set in 参数直接通过设置类型setInt()---registerOutParameter--
call.execute();
CallableStatement调用存储过程和存储函数的sql语句
{call mypro1(?,?)}
{?=call myfn1(?)}
jdbc:oracle:thin:@ip/数据库
jdbc:mysql://ip/数据库
(7)包头和包体
create or replace package mypackage as
type mycursor is ref cursor;--自定义游标类型
procedure mypro(eno in number,o out mycursor);
--声明存储过程,可以在变量后面加上自定义的游标类型
end mypackage;
create or replace package body mypackage as
procedure myro(eno in number,o out mycursor)
as
begin
open mycursor for select * from emp where empno=eno;
end mypro;
end mypackage;
(7)触发器
create or replace trigger 触发器名
before|after
delete|update|insert
on 表名
for each row--行级触发器
begin
end;
raise_application_error(-2999,'') 系统定义错误
oracle04_plsql的更多相关文章
随机推荐
- HTMLTestRunner测试报告中文乱码问题解决
在学习python selenium自动化测试学习中遇到HTMLTestRunner测试报告出现乱码的问题 Test Group/Test case Count Pass Fail Error Vie ...
- 部署Tomcat服务时,解决Cannot invoke Tomcat Manager 异常
最近,在使用Jenkins对工程一键部署的时候,出现调用Tomcat Manager 异常,对其解决方案特记于次. 异常信息 可能存在的异常:(1)Cannot invoke Tomcat manag ...
- TSLint提示错误
要成为优秀的TS开发人员,必须直接禁用TS的不良特性. 为此,道爷亲自操刀编写了TSLint工具,用来分析我们的TS代码,把潜在的Bug和不良代码全部找出来. 目的是为了保证TS的质量,但是存在的问题 ...
- CSS制作波浪线
建议先去了解清楚了径向渐变,线性渐变的用法先 这个作者的css制作波浪线讲解很不错额:https://www.jianshu.com/p/8570433e3669不理解的可以看看这个链接的额 可以去菜 ...
- 分享一个大神自己的blog
std::sort() 详解 http://feihu.me/blog/ C++11 新特性 http://blog.guoyb.com/2016/09/19/cpp11-all/ unity3d 相 ...
- [转]C#异步的世界【上】
阅读目录 APM EAP TAP 延伸思考 新进阶的程序员可能对async.await用得比较多,却对之前的异步了解甚少.本人就是此类,因此打算回顾学习下异步的进化史. 本文主要是回顾async异 ...
- 如何搞定SVN目录的cleanup问题和lock问题
最近在使用SVN的时候碰到一个问题,就是操作时由于粗心大意,在更新的过程中点击取消,使得该目录出现cleanup的操作提示. OK,按照cleanup提示操作后,又提示目录被lock... 网上有解决 ...
- 运用OpenMP提速图像处理速度
一.算法测试 // openmptest的测试程序#include "stdafx.h"void Test(int n){ for (int i=0;i<10000;i ...
- 带新手走进神秘的HTTP协议
在开发的时候经常需要访问网络,比如Android就有好多这方面的框架:Volley.OkHttp.Retrofit等,当你看这些框架源码时,可能会很好奇关于http的部分,它的首部字段是什么意思,ht ...
- CSS清除浮动的几种方式
浮动对页面的影响: 如果一个父盒子中有一个子盒子,并且父盒子没有设置高,子盒子在父盒子中进行了浮动,那么将来父盒子的高度为0.由于父盒子的高度为0, 下面的元素会自动补位,所以这个时候要进行浮动的清除 ...