ORACLE程序包

程序包

 

包主体/规范名字一样

包主体/规范中的对应参数必须类型及名字一样

只能使用强类型的REF游标

 

创建程序包规范

create or replace package my_pack

is

       procedure find_emp_proc(eno emp.empno%type);

       function find_emp_fun(eno emp.empno%type) return emp.ename%type;

end my_pack;

 

SQL> ed

SQL> /

 

Package created

 

调用函数

SQL> select my_pack.find_emp_fun(7788) from dual;

 

select my_pack.find_emp_fun(7788) from dual

 

ORA-04068: 已丢弃程序包  的当前状态

ORA-04067: 未执行,package body "SCOTT.MY_PACK" 不存在

ORA-06508: PL/SQL: 无法在调用之前找到程序单元

ORA-06512: line 1

 

执行存储过程

SQL> exec my_pack.find_emp_proc(7788);

 

begin my_pack.find_emp_proc(7788); end;

 

ORA-04068: 已丢弃程序包  的当前状态

ORA-04067: 未执行,package body "SCOTT.MY_PACK" 不存在

ORA-06508: PL/SQL: 无法在调用之前找到程序单元

ORA-06512: line 2

 

创建程序包主体

create or replace package body my_pack

is

       empname emp.ename%type;

       procedure find_emp_proc(eno emp.empno%type)

       is

       begin

                 select ename into empname from emp where empno=eno;

                 dbms_output.put_line(empname);

       end;

       function find_emp_fun(eno emp.empno%type) return emp.ename%type

       is

       begin

                select ename into empname from emp where empno=eno;

                return empname;

       end;

end my_pack;

 

SQL> ed

SQL> /

 

Package body created

 

调用函数

SQL> select my_pack.find_emp_fun(7788) from dual;

 

MY_PACK.FIND_EMP_FUN(7788)

--------------------------------------------------------------------------------

SCOTT

执行存储过程

SQL> exec my_pack.find_emp_proc(7839);

 

KING

 

PL/SQL procedure successfully completed

 

 

 

 

 

 

 

创建程序包规范

create or replace package emp_pack

is

       procedure find_emp_proc(eno emp.empno%type);

       cursor emp_cur(eno emp.empno%type) return emp%rowtype;

end emp_pack;

 

SQL> ed

SQL> /

 

Package created

 

创建程序包主体

create or replace package body emp_pack

is

       --行类型变量

       empR emp%rowtype;

       --声明强类型REF游标

       cursor emp_cur(eno emp.empno%type) return emp%rowtype

       is

       select * from emp where empno=eno;

       --过程

       procedure find_emp_proc(eno emp.empno%type)

       is

       begin

                 open emp_cur(eno);

                 loop

                      fetch emp_cur into empR;

                      exit when emp_cur%notfound;

                      dbms_output.put_line(empR.ename);

                 end loop;

                 close emp_cur;

       end;

end emp_pack;

 

SQL> ed

SQL> /

 

Package body created

 

执行存储过程

SQL> exec emp_pack.find_emp_proc(7839);

 

KING

 

PL/SQL procedure successfully completed

 

创建程序包规范

create or replace package emp_pack

is

       procedure find_emp_proc;

       cursor emp_cur return emp%rowtype;

end emp_pack;

 

创建程序包主体

create or replace package body emp_pack

is

       --行类型变量

       empR emp%rowtype;

       --声明强类型REF游标

       cursor emp_cur return emp%rowtype

       is

       select * from emp;

       --过程

       procedure find_emp_proc

       is

       begin

                 open emp_cur;

                 loop

                      fetch emp_cur into empR;

                      exit when emp_cur%notfound;

                      dbms_output.put_line(empR.ename);

                 end loop;

                 close emp_cur;

       end;

end emp_pack;

 

执行存储过程

SQL> exec emp_pack.find_emp_proc;

 

SMITH

ALLEN

WARD

JONES

MARTIN

BLAKE

CLARK

SCOTT

KING

TURNER

ADAMS

JAMES

FORD

MILLER

 

PL/SQL procedure successfully completed

 

查询包

 

SQL> select OBJECT_NAME from user_objects where object_type='PACKAGE';

 

OBJECT_NAME

--------------------------------------------------------------------------------

EMP_PACK

MY_PACK

 

查询程序包代码

SQL> select line,text from user_source where name='my_pack';

 

      LINE TEXT

---------- --------------------------------------------------------------------------------

 

SQL> select line,text from user_source where name='MY_PACK';

 

      LINE TEXT

---------- --------------------------------------------------------------------------------

         1 package my_pack

         2 is

         3        procedure find_emp_proc(eno emp.empno%type);

         4        function find_emp_fun(eno emp.empno%type) return emp.ename%type;

         5 end my_pack;

         1 package body my_pack

         2 is

         3        empname emp.ename%type;

         4        procedure find_emp_proc(eno emp.empno%type)

         5        is

         6        begin

         7                  select ename into empname from emp where empno=eno;

         8                  dbms_output.put_line(empname);

         9        end;

        10        function find_emp_fun(eno emp.empno%type) return emp.ename%type

        11        is

        12        begin

        13                 select ename into empname from emp where empno=eno;

        14                 return empname;

        15        end;

 

      LINE TEXT

---------- --------------------------------------------------------------------------------

        16 end my_pack;

 

21 rows selected

 

SQL> select line,text from user_source where name='EMP_PACK';

 

      LINE TEXT

---------- --------------------------------------------------------------------------------

         1 package emp_pack

         2 is

         3        procedure find_emp_proc(eno emp.empno%type);

         4        cursor emp_cur(eno emp.empno%type) return emp%rowtype;

         5 end emp_pack;

         1 package body emp_pack

         2 is

         3        --行类型变量

         4        empR emp%rowtype;

         5        --声明强类型REF游标

         6        cursor emp_cur(eno emp.empno%type) return emp%rowtype

         7        is

         8        select * from emp where empno=eno;

         9        --过程

        10        procedure find_emp_proc(eno emp.empno%type)

        11        is

        12        begin

        13                  open emp_cur(eno);

        14                  loop

        15                       fetch emp_cur into empR;

 

      LINE TEXT

---------- --------------------------------------------------------------------------------

        16                       exit when emp_cur%notfound;

        17                       dbms_output.put_line(empR.ename);

        18                  end loop;

        19                  close emp_cur;

        20        end;

        21 end emp_pack;

 

26 rows selected

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值