Oracle 存储过程包(Package、Package Body)

初出茅庐,不知原来存储过程还可以写得如此复杂,而且还竟然可以调试!

好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅。

使用数据库:Oracle

数据库工具:PL/SQL Developer

在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。

编写单个存储过程的格式可以参考下面这个例子,这是最简单的存储过程例子:

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;"

如果有许多存储过程,那么你可能需要用到存储过程包。在Oracle中使用存储过程包首先要先创建package声明存储过程,之后创建package body写存储过程的具体内容。

存储过程的package相当于Java中的接口,而package body就相当于Java中实现该接口的类。

1.声明存储过程

 

CREATE OR REPLACE PACKAGE PACK_ZOO IS
        /* 不带参数的存储过程 */
        PROCEDURE WATCH_MONKEY;
        /* 带参数的存储过程 */
        PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER);
END PACK_ZOO;

 

①在oracle的存储过程中,形式参数(形参)声明用IN关键字。上面代码[p_food IN VARCHAR2] 中,p_food为变量名,IN为关键字,VARCAHR2为变量类型。

②在存储过程中声明参数,则是直接变量名后跟上变量类型,如下面代码中的name参数:[name VARCAHR2(12)]

2.编写存储过程内容

 

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;

 

在方法体里要给一个变量赋值,应该使用符号 "  :=  ",如:"  name := 'Hello Oracle!'  "

这里用到的语法是PLSQL语法,想了解更多关于PLSQL语法的知识,可以看我的另一篇文章:PL/SQL基础语法

 

posted @ 2014-07-09 18:14  陈树义  阅读(21465)  评论(0编辑  收藏  举报