一、什么是PL/SQL包
来源:互联网 发布:数控车床新代系统编程 编辑:程序博客网 时间:2024/05/17 04:51
一、 什么是PL/SQL包
包就是一个把各种逻辑相关的类型、常量、变量、异常和子程序组合在一起的模式对象。包通常由两个部分组成:包说明和包体,但有时包体是不需要的。包说明(简写为spec)是应用程序接口;它声明了可用的类型、变量、常量、异常、游标和子程序,包体(Body)部分完全定义游标和子程序,并对说明中的内容加以实现。
如下例所示,我们可以认为说明部分是一个可选接口,而包体是一个"黑盒"。我们可以调试、增强或替换一个包体而不同改变接口(包说明)。
我们可以从SQL*Plus中使用CREATE PACKAGE语句来创建一个包。语法如下:
CREATE [ORREPLACE]PACKAGE package_name
[AUTHID {CURRENT_USER |DEFINER}]
{IS |AS}
[PRAGMASERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[constant_declaration ...]
[exception_declaration ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[cursor_spec ...]
[function_spec ...]
[procedure_spec ...]
[call_spec ...]
[PRAGMARESTRICT_REFERENCES(assertions) ...]
END [package_name];
[CREATE [ORREPLACE]PACKAGEBODY package_name {IS |AS}
[PRAGMASERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[constant_declaration ...]
[exception_declaration ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[cursor_body ...]
[function_spec ...]
[procedure_spec ...]
[call_spec ...]
[BEGIN
sequence_of_statements]
END [package_name];]
在包说明部分声明的内容都是公有的,对应用程序是可见的。我们必须在所有的其他内容(除了用于为一个特殊的函数命名的编译指示;这样的编译指示必须跟在函数说明之后)声明之后才可以声明子程序。
包体中的内容有私有的,它实现了说明部分定义的细节内容,并且对应用程序是不可见的。紧跟着包体声明部分的是一个可选的初始化部分,它用于初始化包中的变量等。
AUTHID语句决定了是否是所有的打包子程序都按定义者权限(默认)或调用者权限执行,其中涉及到的模式对象是在定义者的模式中解析还是在调用者的模式中解析。
一个调用说明能让我们在Oracle数据词典中发布一个Java方法或外部C函数。调用说明靠把程序的名称、参数类型和返回类型映射到它们的SQL副本(SQL counterpart)中来发布程序。
1、 PL/SQL包举例
在下面的例子中,我们把一个记录类型、游标和两个employment过程进行打包。要注意,过程hire_employee使用数据库序列empno_seq和函数SYSDATE分别插入到字段雇员编号和雇佣日期。
CREATEORREPLACEPACKAGE emp_actionsAS -- spec
TYPE emprectypISRECORD(
emp_id INT,
salary REAL
);
CURSOR desc_salaryRETURN emprectyp;
PROCEDURE hire_employee(
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER
);
PROCEDURE fire_employee(emp_idNUMBER);
END emp_actions;
CREATEORREPLACEPACKAGEBODY emp_actionsAS -- body
CURSOR desc_salaryRETURN emprectyp IS
SELECT empno, sal
FROM emp
ORDERBY salDESC;
PROCEDURE hire_employee(
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER
) IS
BEGIN
INSERTINTO emp
VALUES (empno_seq.NEXTVAL,
ename,
job,
mgr,
SYSDATE,
sal,
comm,
deptno);
END hire_employee;
PROCEDURE fire_employee(emp_idNUMBER) IS
BEGIN
DELETEFROM emp
WHERE empno = emp_id;
END fire_employee;
END emp_actions;
- 一、什么是PL/SQL包
- 什么是PL/SQL程序
- PL/SQL包
- pl/sql开发包
- PL/SQL-包
- PL/SQL-包
- 包(pl/sql)
- PL/SQL 包
- pl/sql 中的 包
- PL/SQL 的包
- PL/SQL 中的包
- PL/SQL 一
- PL/SQL基础(一)
- PL/SQL程序(一)
- PL/SQL基础(一)
- PL/SQL学习一
- PL/SQL知识点(一)
- PL/SQL(一)
- 【c语言】编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- Visual Studio 2013 C++ 常用插件
- 移除某个图像的缓存
- oracle Hierarchical Queries connect by
- PPT转Flash工具 - iSpring
- 一、什么是PL/SQL包
- 为wordpress的woocommerce插件添加支付宝的JCB支付
- js 阻止默认事件 和事件冒泡
- Build过程(objc)
- Windows Server 2012 R2 配置SharePoint2013
- setTimeout和setInterval的区别你真的了解吗?
- mysql设置UTF-8字符编码(Ubuntu)
- 关于android输入法的一些记录
- @MappedSuperclass的用法