一:包

包是由一组相关的函数,过程,变量,游标等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'; 

PL/SQL学习笔记之包的更多相关文章

  1. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  2. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  3. PL/SQL学习笔记之基本块格式与语法

    一:PL/SQL程序块 PL/SQL是一种块结构的语言,一个PL/SQL程序就是一个 代码逻辑块. PL/SQL程序由三部分构成: 1 声明 部分 使用关键字DECLARE开头,它是一个可选的部分,用 ...

  4. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  5. PL\SQL学习笔记

    注释 单行--多行 一.declare一般用于做变量的申明.begin 程序体开始执行  end; 程序体结束exception .. dbms_output.put_line('绝对值'||v_ab ...

  6. PL/SQL学习笔记_01_基础

    PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command  窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command  窗口中运行的步骤如下: 1)File—new com ...

  7. PL/SQL学习笔记程序单元

    一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...

  8. PL/SQL学习笔记之日期时间

    一:PL/SQL时间相关类型 PL/SQL提供两个和日期时间相关的数据类型: 日期时间(Datetime)数据类型 时间间隔类型 二:日期时间类型 datetime数据类型有: DATE TIMEST ...

  9. PL/SQL学习笔记之集合

    一:PL/SQL集合 集合是一个有序且存有相同的类型数据的数据结构. PL/SQL提供了三种集合类型: 索引表(关联数组) 嵌套表 数组 二:索引表:一个索引表(也叫关联数组)是一组键 - 值对.每个 ...

随机推荐

  1. day 58 bootstrap -part1

    我们的bootstrap主要使用都是官网里面的内容,官网里面的都整理得很完备,有需要的时候就直接去里面找即可, 关于这个bootstrap,我所理解的就是,我们前面所学的那些,从html开始一直到后面 ...

  2. IEnumerable 与 IEnumerable<T>

    转自:https://blog.csdn.net/qq_21419015/article/details/80495322 IEnumerable 和IEnumerable<T> 接口在 ...

  3. 【JavaScript】jQuery

    No1: jQuery能帮我们干这些事情: 消除浏览器差异:你不需要自己写冗长的代码来针对不同的浏览器来绑定事件,编写AJAX等代码: 简洁的操作DOM的方法:写$('#test')肯定比docume ...

  4. python实现链表(二)

    class SingleNode(object): """单链表的结点""" def __init__(self,item): # _ite ...

  5. 大数据环境完全分布式搭建 hadoop2.4.1

    (如果想要安装视频及相关软件可以博私聊我 qq 731487514) hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA.YARN等.最新的hadoop-2.4.1又增加了YA ...

  6. Django之ORM字段和字段参数

    ORM介绍 ORM概念 ORM由来 ORM的优势 ORM的劣势 ORM总结 Django中的ORM Django项目使用MySQL数据库 Model 快速入门 字段 自定义字段 字段参数 Model ...

  7. Django之路由

    Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时 ...

  8. System.ServiceModel.AddressAccessDeniedException

    发生了 System.ServiceModel.AddressAccessDeniedException   HResult=0x80131501   Message=HTTP 无法注册 URL ht ...

  9. 【PYTHON】 Missing parentheses in call to 'print'

    Microsoft Windows [版本 10.0.15063] (c) 2017 Microsoft Corporation.保留所有权利. C:\Users\Jam>python Pyth ...

  10. Android多线程的使用

    The speed and efficiency of a long-running, data-intensive operation often improves when you split i ...