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,'') 系统定义错误
转载于:https://www.cnblogs.com/PinkPink/p/7600735.html
