Oracle包及包的调用

Posted 奔跑的金鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle包及包的调用相关的知识,希望对你有一定的参考价值。

1.概述

包用于将相关的对象组合在一起,一个任务,需要多个函数或者过程协同才能完成,这时,可以这些函数和存储过程都放在一个包下,方便函数和存储过程的管理,提高程序的性能,在第一次用的时候,会全部读入内存,下次用直接从内存取,加强模块化。

包分为两部分:

1.包头(类似java接口)
     包的规范,只包含了函数或存储过程的说明部分
     创建包头语法:
        create [or replace] package 包名 is|as
           --函数定义
           function 函数名 [(参数列表)] return 返回类型;
           --存储过程定义
           procedure 存储过程名 [(参数列表)];
        end [包名]; 
  2.包体(类似java实现类)
     实现包头里定义的规范
     创建包体语法:
        create [or replace] package body 包名 is|as
           --函数实现
           function 函数名 [(参数列表)] return 返回类型 is|as
              函数实现内容
           --存储过程实现
           procedure 存储过程名 [(参数列表)] is|as
              存储过程实现内容
        end [包名]; 

2.实战演练

-- 建立包
create or replace package emp_pkg is
    TYPE t_ref_cursor is REF CURSOR;
    FUNCTION get_emp_ref_cussor RETURN t_ref_cursor;
    PROCEDURE update_emp_sal(
     e_empno  IN emp.empno%type,
     e_sal number
    );
end emp_pkg;

-- 建立包体
create or replace package body emp_pkg is

  FUNCTION get_emp_ref_cussor RETURN t_ref_cursor IS
    v_emp_ref_cursor t_ref_cursor;
  BEGIN
    OPEN v_emp_ref_cursor FOR
         SELECT empno, ename, sal 
         FROM emp; 
    RETURN v_emp_ref_cursor;
  END get_emp_ref_cussor;
  
  PROCEDURE update_emp_sal(
            e_empno  IN emp.empno%type,
            e_sal    IN NUMBER
            ) AS
  BEGIN
       UPDATE emp SET SAL = SAL/e_sal WHERE empno = e_empno;
       COMMIT;
  EXCEPTION
       WHEN OTHERS THEN
            DBMS_OUTPUT.put_line(SQLERRM);
       ROLLBACK;
  END update_emp_sal;
  
END emp_pkg;

2.1 调度包中函数

select emp_pkg.get_emp_ref_cussor from dual;

输出结果截图:

2.2 调度包中的过程

CALL emp_pkg.update_emp_sal(7369, 10000)

以上是关于Oracle包及包的调用的主要内容,如果未能解决你的问题,请参考以下文章

Vue 将git版本信息加入包及包名中

做一个,记一篇 — Java调用Oracle存储过程

Python之模块及包的导入

Python3之模块及包的导入

python查看package的安装路径及包的方法

Node.js 模块加载及包的管理