Oracle包的用法

Oracle包的用法
1、语法格式
  创建包头 
CREATE [OR REPLACE] PACKAGE 包名
  IS|AS
  变量、常量及数据类型定义;
  游标定义头部;
  函数、过程的定义和参数列表以及返回类型;
  END [包名];

  创建包体

CREATE [OR REPLACE] PACKAGE BODY 包名
        IS|AS
            PROCEDURE 过程名(参数)
            IS|AS
            BEGIN
            过程体;
            END [过程名];
            
            FUNCTION 函数名(参数) RETURN 类型
            IS|AS
            BEGIN
            函数体;
            END [函数名];
        END;

2、sql实例

创建一个包,包含有存储过程和函数

CREATE OR REPLACE PACKAGE PK_MYPACKAGE
        IS
          A NUMBER;                                  -- 声明变量(声明的对象不一定要在包体中使用)
          PROCEDURE MY_SP(P_EMPNO IN NUMBER);        -- 声明存储过程
          FUNCTION MY_FUN(P_NUM1 IN NUMBER , P_NUM2 IN NUMBER) RETURN NUMBER; -- 声明函数
        END;

 

CREATE OR REPLACE PACKAGE BODY PK_MYPACKAGE
        IS
          -- 通过员工号找员工姓名和工资存储过程
          PROCEDURE MY_SP(P_EMPNO IN NUMBER)    -- 和包中的声明要对应(并且一定要先声明)
          IS
          V_ENAME EMP.ENAME%TYPE;
          V_SAL   EMP.SAL%TYPE;
          BEGIN
            SELECT ENAME, SAL INTO V_ENAME, V_SAL FROM EMP WHERE EMPNO=P_EMPNO;
            DBMS_OUTPUT.PUT_LINE('姓名:'|| V_ENAME ||'工资:'|| V_SAL);
            EXCEPTION 
              WHEN NO_DATA_FOUND THEN
                  DBMS_OUTPUT.PUT_LINE('SELECT INTO语句中没有返回任何记录!'); 
              WHEN TOO_MANY_ROWS THEN 
                  DBMS_OUTPUT.PUT_LINE('SELECT INTO语句中返回多于1条记录!');
          END;
          
          -- 比较大小函数
          FUNCTION MY_FUN(P_NUM1 IN NUMBER , P_NUM2 IN NUMBER)
          RETURN NUMBER
          IS
          BEGIN 
            IF P_NUM1>P_NUM2 THEN 
              RETURN P_NUM1;
            ELSE 
              RETURN P_NUM2; 
            END IF;
          END;
        END;

3、调用包中的存储过程和函数

  调用函数:

select PK_MYPACKAGE.MY_FUN(3, 5)
from dual;

  调用存储

begin
    PK_MYPACKAGE.MY_SP(7369);
end;

或者

call PK_MYPACKAGE.MY_SP(7369);

注意:如果存储里面有输出参数就只能用第一种方法

 

posted @ 2022-08-09 09:17  左叔  阅读(564)  评论(0)    收藏  举报