oracle04

mac2022-06-30  19

 

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

最新回复(0)