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 @   左叔  阅读(536)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版
点击右上角即可分享
微信分享提示