子程序与程序包

来源:互联网 发布:网络词鸡精是什么意思 编辑:程序博客网 时间:2024/05/16 06:35

子程序

PL/SQL命名程序块的定义在PL/SQL程序块的声明部分,用户称之为子程序。子程序=过程+函数

存储过程(命名的PL/SQL块,相当于JAVA里面的方法)

创建存储过程的语法:create [ or replace]  procedure<procedure_name>(<arg1 [mode]  datatype>,…………)is|as[declaration]begin[exception]end[procedure_name];

三种调用方式

   第一种    通用  call   proc1();    第二种  pl/sql       sql 窗口  begin       proc1();  end;  第三种  exec proc1();   sql命令提示符  传参。in(输入 default)   out(输出)    in out(输入输出)        数据类型不能申明长度。
举例
--第一个create or replace procedure proc1asbegin     dbms_output.put_line('hello!');end;--调用call   proc1();beginproc1();end;exec proc1();-- in   传值:  传入的是一个常量create or replace procedure proc1(a in number,b varchar, c varchar)asbegin     a:=11;     insert into dept values(a,b,c);     commit;end;-- out   输出:  输入的值被忽略create or replace procedure proc2(a number,b out number)as     v emp.sal%type;begin     select  sal into v from emp where empno=a;     b:=v;end;declare       b number(7,2);begin   b:=10;   proc2(7369,b);   dbms_output.put_line('工资:'||b);end;-- in out 传引用,传的是对象本身,  create or replace procedure proc3(a in out integer ,b in out integer)as    temp int;begin    temp:=a;    a:=b;    b:=temp;end;declare    a int;    b int;begin     a:=10;     b:=20;     dbms_output.put_line('传入前a:  '||a);     dbms_output.put_line('传入前b:  '||b);     proc3(a,b);     dbms_output.put_line('传入后a:  '||a);     dbms_output.put_line('传入后b:  '||b);end;select * from emp;--函数 function-- 语法,一定两个returncreate or replace function fun1(a int) return intas       v emp.sal%type;begin     select sal into v from emp where empno=a;     return v;end;select fun1(7369) from dual;总结:      函数与过程不同      返回不同:  过程 可以返回,可以不返回,可以返回多个                  函数,一定要返回一个      调用方式不同: 过程  单独调用     java   CallableStateMent接口                        函数  写在SQL里面     java   PrereparedStateMent接口

程序包

程序包是对相关类型、变量、常量、游标、异常、过程和函数的封装。由包规范和包主体两部分组成
--包头: 对外声明作用,对外是可见的,声明我这个包里有什么东西create or replace  package pack1as       procedure proc1(a number,b out number);       function fun1(a number) return number;end;   --包体  对外是不可观的黑盒,实现包头的声明            create or replace  package body pack1is       procedure proc1(a number,b out number)       as       begin            select sal into b from emp where empno=a;       end proc1;       function fun1(a number) return number       as         v number(7,2);       begin            select sal into v from emp where empno=a;            return v;       end fun1;end pack1;   --调用declare       a int;       b number(7,2);begin     a:=&工号;     pack1.proc1(a,b);     dbms_output.put_line('工资:'||b);     select fun1(a) into b from dual;     dbms_output.put_line('工资:'||b);end;  select pack1.fun1(7369),sal  from emp;
0 0
原创粉丝点击