一、程序包

  程序包是一种数据库对象,它是对相关PLSQL类型、子程序、游标、异常、变量和常量的封装。程序包包含两部分内容:

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

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

二、程序包规范

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

  语法:

  create [or replace] package package_name

  is|as

    [public type and item declations]

    [subprogram specifications]

  end [package_name]

  说明:

  package_name:包的名称。

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

  subprogram specifications:声明PL/SQL子程序,也就是存储过程和函数。

  在程序包规范中声明的项也可以再程序包之外使用。这样的项成为“公用对象”。

  

  例:

--程序包规范的声明
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]

  [begin

    initialization_statements]

  end [package_name]

  说明:

  public type and item declarations:声明变量、常量、游标、异常或类型。

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

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

  

  例:对上面所声明的规范部分的存储过程和函数提供实现。  

--创建程序包主体,提供程序包内容的实现,和存储过程、函数的声明一致
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;

Oracle基础 程序包的更多相关文章

  1. Oracle基础<4>--程序包

    一:程序包定义(包括1.程序包规范 2.程序包主体) 程序包是一种数据库对象,它是对相关pl/sql 类型.子程序.游标.异常.变量和常量的封装. 1.程序包规范:可以声明类型.变量.常量.异常.游标 ...

  2. Oracle存储过程和程序包

    一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

  3. linux基础之程序包管理(rpm,yum)

    一.rpm 安装:rpm { -i | --install } [ install-options ] PACKAGE_FILE... -v: 显示安装时的详细信息 -vv: 显示许多难以阅读的调试信 ...

  4. Oracle编程入门经典 第11章 过程、函数和程序包

    目录 11.1          优势和利益... 1 11.2          过程... 1 11.2.1       语法... 2 11.2.2       建立或者替换... 2 11.2 ...

  5. Oracle数据库程序包全局变量的应用

    1 前言  在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...

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

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

  7. Oracle学习笔记十四 内置程序包

    扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...

  8. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  9. Oracle程序包

    程序包由两部分构成:规范(specification)和主体(body). 创建表 create table PEOPLE ( ID NUMBER primary key not null, NAME ...

随机推荐

  1. bzoj3643 Phi的反函数

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3643 [题解] n = p1^a1*p2^a2*...*pm^am phi(n) = p1( ...

  2. ui_modules和ui_method

    ## 06ui.py #coding:utf-8 import tornado.httpserver import tornado.ioloop import tornado.options impo ...

  3. 负载均衡技术之-lvs

    LVS简介 Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU.I/O处理能力很快会成为瓶颈.由于单台服 ...

  4. 【转载】SQL SERVER-Delete和Truncate的区别

    转载博客:http://blog.csdn.net/dba_huangzj/article/details/7913068 背景 一般在删除表数据时候,通常会有执行两个SQL语句:delete和tru ...

  5. react 如何处理页面加载时无法将获取缓存信息存入全局变量中

    最近在做一个权限功能时,发现在读取用户公司ID进行列表查询 时,无法钭读取到缓存中的数据存入页面全局变量中进行加载查询 将问题代码整理出来 将信息存入缓存: let menuList = Helper ...

  6. [jquery] 给动态生成的元素绑定事件 on方法

    用底下的方法尝试了好多次都失败 $('.del').on('click',function(){ alert('aa'); })// 失败!! 终于在准备放弃前看到一篇博文说的方法 $(documen ...

  7. ELK集群

    kafka集群-------------------1. 下载wget http://mirror.rise.ph/apache/kafka/0.11.0.0/kafka_2.12-0.11.0.0. ...

  8. UOJ 180【UR #12】实验室外的攻防战

    http://uoj.ac/contest/25/problem/180 从前往后对比串A,B 当$A_i,B_i$不相同时找到$B_i$在A中的位置j 若$min{A_1,A_2,A_3...... ...

  9. luogu P1195 口袋的天空

    题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...

  10. 四. Java继承和多态6. 多态对象的类型转换

    这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...