(十三)PL/SQL包

PL/SQL包是组逻辑相关的PL/SQL类型,变量和子程序模式对象。
程序包将有两个强制性的部分:
  1.包装规范定义
  2.包体或定义

一、包装规范定义
规范是接口到包。它只是声明的类型,变量,常量,异常,游标和子程序可从封装外部引用。换句话说,它包含关于包的内容的所有信息,但不包括用于子程序的代码。
置于规范的所有对象被称为公共对象。任何子程序在封装主体中没有包定义但编码被称为私有对象。

下面的代码片段显示了具有单一的程序包规范定义。一个包中可以定义的全局变量和多个程序或函数。
  CREATE PACKAGE cust_sal AS
     PROCEDURE find_sal(c_id customers.id%type);
  END cust_sal;
  /
  当上述代码在SQL提示符执行时,它产生了以下结果:
  Package created.

二、包主体
包体已经在包定义和其他私人声明中声明的各种方法,这是从代码隐藏在包外的代码。
CREATE PACKAGE BODY语句用于创建包体。下面的代码片段显示了包体声明上面创建的cust_sal包。
  CREATE OR REPLACE PACKAGE BODY cust_sal AS
     PROCEDURE find_sal(c_id customers.id%TYPE) IS
     c_sal customers.salary%TYPE;
     BEGIN
        SELECT salary INTO c_sal FROM customers   WHERE id = c_id;
        dbms_output.put_line(‘Salary: ‘|| c_sal);
     END find_sal;
  END cust_sal;
  /
  当上述代码在SQL提示符执行时,它产生了以下结果:
  Package body created.

三、使用包元素
访问包元素(变量,过程或函数)的语法如下:
  package_name.element_name;
我们已经在上面的数据库模式中创建的包,下面的程序是使用cust_sal包的find_sal方法:
  DECLARE
     code customers.id%type := &cc_id;
  BEGIN
     cust_sal.find_sal(code);
  END;
  /
  当上面的代码在SQL提示符下执行,它提示输入客户ID,当输入一个ID,它会显示相应的薪酬如下:
  Enter value for cc_id: 1
  Salary: 3000

  PL/SQL procedure successfully completed.

四、例子

//下面的程序提供了一个更为完整的方案。我们将使用存储在数据库中的CUSTOMERS表的以下记录:
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  3000.00 |
|  2 | Khilan   |  25 | Delhi     |  3000.00 |
|  3 | kaushik  |  23 | Kota      |  3000.00 |
|  4 | Chaitali |  25 | Mumbai    |  7500.00 |
|  5 | Hardik   |  27 | Bhopal    |  9500.00 |
|  6 | Komal    |  22 | MP        |  5500.00 |
+----+----------+-----+-----------+----------+
1.包规范定义:
CREATE OR REPLACE PACKAGE c_package AS
   -- Adds a customer
   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);

   -- Removes a customer
   PROCEDURE delCustomer(c_id  customers.id%TYPE);
   --Lists all customers
   PROCEDURE listCustomer;

END c_package;
/
当上面的代码在SQL提示符下执行,它会创建上述包,并显示以下结果:
Package created.

2.创建包的主体部分:
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;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
Package body created.

3.使用包:
下面的程序使用声明并在包c_package中定义方法。
DECLARE
   code customers.id%type:= 8;
BEGIN
      c_package.addcustomer(7, ‘Rajnish‘, 25, ‘Chennai‘, 3500);
      c_package.addcustomer(8, ‘Subham‘, 32, ‘Delhi‘, 7500);
      c_package.listcustomer;
      c_package.delcustomer(code);
      c_package.listcustomer;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
Customer(1): Ramesh
Customer(2): Khilan
Customer(3): kaushik
Customer(4): Chaitali
Customer(5): Hardik
Customer(6): Komal
Customer(7): Rajnish
Customer(8): Subham
Customer(1): Ramesh
Customer(2): Khilan
Customer(3): kaushik
Customer(4): Chaitali
Customer(5): Hardik
Customer(6): Komal
Customer(7): Rajnish

PL/SQL procedure successfully completed
时间: 2024-10-30 01:47:43

(十三)PL/SQL包的相关文章

oracle PL/SQL 包的介绍(四)

PL/SQL 的包1.逻辑相关的组件的组合 (变量,数据结构,异常,存储过程,函数)2.组成 : 定义 和 包体 -- 组成包头 : PUBLIC 包体 : PRIVATE -- 包头的语法   1 CREATE OR REPLACE PACKAGE package_name IS|AS 2 PUBLIC TYPE AND VARIABLE declarations 3 subprogram specifications 4 END [package_name]; --实例 1 CREATE O

PL/SQL 包的概念及创建使用

包1:概念包是一组过程.函数.变量.常量和游标等元素的组合.是对这些PL/SQL 程序设计元素的封装.其中变量相当于类中的成员变量,过程和函数相当于类方法.把相关的模块归类成包,可使开发人员利用面向对象的方法进行存储过程的开发.2:包的组成部分: (1)包定义(PACKAGE):包定义部分声明包内数据类型.变量.常量.游标.子程序和异常错误处理等元素,这些元素为包的公有元素. (2)包主体(PACKAGE BODY):包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主

PL/SQL包(Package)

包(Package)的主要作用是用于逻辑组合相关的PL/SQL类型,一旦创建了包,包就会被存储在Oracle数据库中. 包由以下两部分组成: (1)包规范(Specification):主要是包的一些定义信息,不包含具体的实现,包含类型(type),记录(record),变量(variable),常量(constant),异常(exception)定义,游标(cursor)和子程序(function or procedure)的声明. (2)包体(Body):包体是对包规范中声明的子程序的实现部

oracle pl/sql 包

包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成.1).我们可以使用create package命令来创建包,如:i.创建一个包sp_packageii.声明该包有一个过程update_saliii.声明该包有一个函数annual_income --声明该包有一个存储过程和一个函数create package sp_package is procedure update_sal(name varchar2, newsal number); function annual_income(n

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之

Oracle数据库之开发PL/SQL子程序和包

Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编译后

PL/SQL之--包

一.包 包是一组相关过程.函数.常量.变量.游标.异常等PL/SQL程序设计元素的组合.它类似于C++和Java中的类,其中变量相当于类中的成员变量,过程和函数相当于类中的方法.通过使用包,可以使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统的性能. 包的结构如下: 一个包由包头和包主体组成: 包头(package):包头部分声明包内数据类型.变量.常量.游标.子程序(只有声明)和异常错误处理等元素,这些元素为包的共有元素. 包主体(package body):包主体则是包定义部分的

PL/SQL数据库开发那点事

PL/SQL数据库开发那点事-->编程,存储程序 在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中.如果在SQL*plus 中执行了其他的SQL语句或PL/SQL块,缓冲区中就会存放新的代码,原来的PL/SQL块就会被从缓冲区中清除出去.这种没有名称只是临时存放在缓冲区中的PL/SQL块叫做匿名块.匿名块就是没有名字的PL/SQL块,它仅存放在缓冲区中,只能在当前SQL*plus环境中执行.如果希望PL/SQL块

pl/sql程序语言

pl/sql程序基础知识: pl/sql(procedural language/sql)oracle在标准sql上面的扩展,不仅简单的sql语句,还具有一般语言的特性:变量,常量,流程控制和循环,错误处理机制.是一个功能完善强大的过程化语言. 它的编程基本单位是块,复杂的功能都是多个块组成 我们来看看它的实列代码: 块结构: declear --定义部分,可选 /*定义部分--变量,常量,游标,异常,复杂数据类型*/ begin --执行部分 /*pl/sql语句和SQL语句;*/ excep