zoukankan      html  css  js  c++  java
  • PL/SQL学习笔记之包

    一:包

       包是由一组相关的函数,过程,变量,游标等PL/SQL程序设计元素的组合而成的一个PL/SQL程序单元,相当于Java中的类。

       包的主要作用是封装:把相同或相似的东西归类,方便维护和管理,提高开发效率,提高性能。

    二:包的开发

        包的开发包括两部分:包的声明定义  和  包的主体开发。

        包的声明定义:声明  类型,变量,常量,异常,游标,函数,过程(声明,但不实现!) ,在包的声明部分定义的变量是公有变量(public),可以在包外通过  包名.变量名  引用。

        包的主体开发:在包的主体对 函数、过程 等进行具体的代码实现;在包主体的声明部分,可以定义私有变量,只在包内使用

    三:创建包(包的声明定义)

    CREATE [OR REPLACE] PACKAGE package_name  
    [AUTHID{CURRENT_USER|DEFINER}]  
    --AUTHID CURRENT_USER 和 AUTHID DEFINER 选项说明应用程序在调用函数时所使用的权限模式  
    IS|AS  
      [公有数据类型定义]  
      [公有游标声明]  
      [公有变量、常量声明]  
      [公有函数声明]  
      [公有过程声明]  
    END [package_name];

    例子:

    CREATE OR REPLACE PACKAGE c_package AS
       -- 过程声明
       PROCEDURE addCustomer(c_id   customers.id%type,
       c_name  customers.name%type,
       c_age  customers.age%type,
       c_addr customers.address%type, 
       c_sal  customers.salary%type);
      
       -- 过程声明
       PROCEDURE delCustomer(c_id  customers.id%TYPE);
    
       --过程声明
       PROCEDURE listCustomer;
     
    END c_package;

    四:包开发(包的主体开发)

        CREATE [OR REPLACE] PACKAGE BODY package_name  
        IS|AS  
          [私有数据类型定义]  
          [私有变量、常量声明]  
          [私有异常错误声明]  
          [私有函数声明和定义]  
          [私有函过程声明和定义]  
          [公有游标定义]//对游标进行具体赋值  
          [公有函数定义]//对函数进行具体代码实现
          [公有过程定义]//对过程进行具体代码实现
        BEGIN  
          --执行部分(一般为空)
        END package_name;  

    例如:

    CREATE OR REPLACE PACKAGE BODY c_package AS
       PROCEDURE addCustomer(c_id  customers.id%type,
          c_name customers.name%type,
          c_age  customers.age%type,
          c_addr  customers.address%type, 
          c_sal   customers.salary%type)
       IS
       BEGIN
          INSERT INTO customers (id,name,age,address,salary)
             VALUES(c_id, c_name, c_age, c_addr, c_sal);
       END addCustomer;
      
       PROCEDURE delCustomer(c_id   customers.id%type) IS
       BEGIN
           DELETE FROM customers
             WHERE id = c_id;
       END delCustomer;
    
       PROCEDURE listCustomer IS
       CURSOR c_customers is
          SELECT  name FROM customers;
       TYPE c_list is TABLE OF customers.name%type;
       name_list c_list := c_list();
       counter integer :=0;
       BEGIN
          FOR n IN c_customers LOOP
          counter := counter +1;
          name_list.extend;
          name_list(counter)  := n.name;
          dbms_output.put_line('Customer(' ||counter|| ')'||name_list(counter));
          END LOOP;
       END listCustomer;
    END c_package;

    五:包调用

    packageName.var; //调用公有变量
    packageName.func(param...);//调用函数
    packageName.procedure(param..);//调用过程

    六:删除包

    DROP PACKAGE [BODY] [user.]package_name;

    七:查看包源码

     select text from user_source where name = 'packageName'; 
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/ygj0930/p/8298205.html
Copyright © 2011-2022 走看看