oracle中的package和package body的使用

本文深入解析Oracle数据库中存储过程与包的概念及应用。通过实际案例,详细讲解了存储过程的创建与异常处理,以及如何使用包进行SQL代码封装,以实现代码复用。对比了单个存储过程与包的不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念: 为了让大家通俗的理解这个这两个术语含义我用java中的两个名词来代替。package相当于java代码中的接口,package body则是接口的具体实现类。

比如我们一般写单个的存储过程时可以在声明后直接写具体执行的sql语句。
单个的存储过程

CREATE OR REPLACE PROCEDURE PROC_TEST IS
  /* 声明变量 */
  count number;
  BEGIN
     /* SQL代码 */
     select * from dual;
  /* 异常处理 */
  EXCEPTIOIN
    WHEN NO_DATA_FOUND THEN
        --处理代码
    WHEN OTHERS THEN
        --处理代码
  END PROC_TEST; --这里也可以直接写成: "END;"

或者声明一个package,在package body写具体执行的sql。其实目的就是把特定逻辑的sql封装到了一个包中,以为代码的复用。

CREATE OR REPLACE PACKAGE PACK_ZOO IS
        /* 不带参数的存储过程 */
        PROCEDURE WATCH_MONKEY;
        /* 带参数的存储过程 */
        PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER);
END PACK_ZOO;
CREATE OR REPLACE PACKAGE BODY PACK_ZOO IS
      /*
        * 不带参数的存储过程
        */
      PROCEDURE WATCH_MONKEY IS
          /* 参数声明 */
          name VARCHAR2(12);
          BEGIN
          /* 处理体 */
             SELECT * FROM DUAL;
          /* 异常处理 */
          EXCEPTION
                 WHEN NO_DATA_FOUND THEN
                      DBMS_OUTPUT.PUT_LINE('无数据记录');
                 WHEN OTHERS THEN
                      DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode);  --sqlcode代表异常代码
                      DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm);  --sqlerrm代表异常信息
   END WATCH_MONKEY;
/*
        *带参数的存储过程
        */
       PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER) IS
          /* 参数声明 */
          name VARCHAR2(12);
       BEGIN
          /* 处理体 */
          name := 'Hello Oracle!';
          /* 异常处理 */
          EXCEPTION
             WHEN NO_DATA_FOUND THEN
                  DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN');
             WHEN OTHERS THEN
                  DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode);  --sqlcode代表异常代码
                  DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm);  --sqlerrm代表异常信息
       END FEED_MONKEY;
END PACK_ZOO;```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值