Oracle基础 程序包
一、程序包
程序包是一种数据库对象,它是对相关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基础 程序包的更多相关文章
- Oracle基础<4>--程序包
一:程序包定义(包括1.程序包规范 2.程序包主体) 程序包是一种数据库对象,它是对相关pl/sql 类型.子程序.游标.异常.变量和常量的封装. 1.程序包规范:可以声明类型.变量.常量.异常.游标 ...
- Oracle存储过程和程序包
一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...
- linux基础之程序包管理(rpm,yum)
一.rpm 安装:rpm { -i | --install } [ install-options ] PACKAGE_FILE... -v: 显示安装时的详细信息 -vv: 显示许多难以阅读的调试信 ...
- Oracle编程入门经典 第11章 过程、函数和程序包
目录 11.1 优势和利益... 1 11.2 过程... 1 11.2.1 语法... 2 11.2.2 建立或者替换... 2 11.2 ...
- Oracle数据库程序包全局变量的应用
1 前言 在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- Oracle学习笔记十四 内置程序包
扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...
- Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包
子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中. 子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...
- Oracle程序包
程序包由两部分构成:规范(specification)和主体(body). 创建表 create table PEOPLE ( ID NUMBER primary key not null, NAME ...
随机推荐
- 【ZOJ4063】Tournament(构造)
题意:n个人要打m轮比赛 每一轮每个人都要有一个对手.而且每个对手只能打一次.假设a与b打了,c与d打了, 那么后面的任意一轮如果a与c打了,那么b就必须和d打 问是否存在方案,输出字典序最小的一组, ...
- 杭电oj2064、2067、2068、2073、2076-2078、2080、2083-2085
2064 汉诺塔III #include<stdio.h> int main(){ int n,i; _int64 s[]; while(~scanf("%d",&a ...
- 【计算机网络】HTTP协议详解
详见:http://blog.csdn.net/gueter/article/details/1524447 不让转载,但写得很好
- css实现web前端最美的loading加载动画!
这些好看的loading效果,你还只会用第三方库吗?CSS3教你实现 前言 loading效果在实际开发中是很常见的,尤其是在Ajax请求的时候,可以给用户一个很好的交互体验. 今天这篇文章我们一起 ...
- Usage of API documented as @since 1.6+
报错:即方法是Java1.6才开始有的 File ->Project Structure->Project Settings -> Modules -> Language Le ...
- (3)oracle建用户、建表、权限、命名空间
一.表空间 创建表空间 create tablespace ts001 datafile ‘d:\test\a.dbf’ size 20m uniform size 128k; 使用表空间 cre ...
- ESXI和vSphere的安装配置-实现一台电脑硬件虚拟化为两台
本篇文章包含以下几个部分: 1EXSI软件和vSphere软件的安装 2在vSphere上安装虚拟系统 3对虚拟系统通过配置实现硬件虚拟化,实现硬件直通 1.EXSI安装 通过网上下载EXSI ISO ...
- Python的并发并行[3] -> 进程[1] -> 多进程的基本使用
多进程的基本使用 1 subprocess 常用函数示例 首先定义一个子进程调用的程序,用于打印一个输出语句,并获取命令行参数 import sys print('Called_Function.py ...
- 【bzoj1485:】【 [HNOI2009]有趣的数列】模任意数的卡特兰数
(上不了p站我要死了,侵权度娘背锅) Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇 ...
- redis的lua脚本拓展,返回nil及其判断
redis自带的lua脚本 127.0.0.1:6379> hget team wyc "{\"name\":\"wyycc\",\" ...