• Oracle基础<4>--程序包


    一:程序包定义(包括1.程序包规范 2.程序包主体)

      程序包是一种数据库对象,它是对相关pl/sql 类型、子程序、游标、异常、变量和常量的封装。

      1、程序包规范:可以声明类型、变量、常量、异常、游标和子程序。

      2、程序包主体:可以实现在程序包规范中定义的游标、子程序。

    二:程序包规范

      程序包规范包含一些应用程序课件的公共对象和类型的声明它是应用程序的借口。规范包含应用程序所需的资源,如果程序包规范只声明类型、常量、变量和异常,则不需要有程序包主体。只有子程序和游标才具有程序包主体。

      语法:

      creat [or replace] package package_name --包名称

      [is | as]

      [public type and item declations]    --声明公共类型、常量、变量、异常和游标等

      [subprogram specifications]   --声明pl/sql子程序,也就是存储过程和和函数

      end [package_name];


    --程序包规范的声明
    CREATE OR REPLACE PACKAGE PACKAGE_ME IS
      PROCEDURE PRO_EMP_SELECT(ENO NUMBER); --声明一个存储过程:根据员工编号查询员工信息
      FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER; --声明一个函数,根据员工编号查询员工工资。
    END PACKAGE_ME;


    三:程序包主体

      语法:

      create [or replace] package body package_name

      is|as    

        [public type and item declarations]--声明变量、常量、游标、异常或类型

        [subprogram bodies]                    --定义公共和私有PL/SQL子程序。

      [begin

        initialization_statements]     --程序包中规范代码的实现。

      end [package_name];


    --创建程序包主体,提供程序包内容的实现,和存储过程、函数的声明一致
    CREATE OR REPLACE PACKAGE BODY PACKAGE_ME IS
      PROCEDURE PRO_EMP_SELECT(ENO NUMBER) AS
        V_NAME EMP.ENAME%TYPE;
        V_SAL  EMP.SAL%TYPE;
      BEGIN
        SELECT ENAME, SAL INTO V_NAME, V_SAL FROM EMP WHERE EMPNO = ENO;
        DBMS_OUTPUT.PUT_LINE('name:' || V_NAME || '   sal:' || V_SAL);
      END PRO_EMP_SELECT;

      FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER AS
        V_SAL EMP.SAL%TYPE;
      BEGIN
        SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = ENO;
        RETURN V_SAL;
      END FUN_EMP_SELECT;
    END PACKAGE_ME;


    四、调用程序包 


    DECLARE
      v_sal emp.sal%TYPE;
    BEGIN
        package_me.PRO_EMP_SELECT(7788);                --调用方式和调用存储过程方式一样,不过需要在存储过程前添加程序包名
        v_sal := package_me.FUN_EMP_SELECT(7788);       --调用方式和调用函数方式一样,不过需要在函数前添加程序包名
        dbms_output.put_line(v_sal);
    END;

    
    
    
  • 相关阅读:
    gitignore 过滤文件
    lua语言入门之Sublime Text设置lua的Build System
    进程间通信
    临界区 事件 互斥对象等多线程编程基础
    Delphi通过Map文件查找内存地址出错代码所在行
    Delphi/C++ Builder Map文件格式解析
    深入理解计算机系统----读书笔记
    TCP/IP——内网IP
    Python——import与reload模块的区别
    Linux——grep binary file
  • 原文地址:https://www.cnblogs.com/futao123/p/4470234.html
Copyright © 2020-2023  润新知