Oracle学习5_Oracle 存储过程包(Package、Package Body)

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

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

使用数据库:Oracle

数据库工具:PL/SQL Developer

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

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.声明存储过程

1

2

3

4

5

6

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.编写存储过程内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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基础语法

转自:https://www.cnblogs.com/chanshuyi/p/3834140.html

猜你喜欢

转载自blog.csdn.net/wang_zhenwei/article/details/88560428
今日推荐