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

  • 相关阅读:
    Linux常用命令
    PHP中的 extends与implements 区别
    IDEA链接MongoDB数据库-实现增删改查
    在IDEA中用三个jar包链接MongoDB数据库——实现增删改查
    MongoDB修改账号密码
    进入 MongoDB
    MongoDB安装
    解决{"error_code":110,"error_msg":"Access token invalid or no longer valid"}
    毕设进度(10.29)
    毕设进度(10.28)
  • 原文地址:https://www.cnblogs.com/chanshuyi/p/3834140.html
Copyright © 2020-2023  润新知