oracle 包 Package 的学习
来源:互联网 发布:知世超级超级超级犀利 编辑:程序博客网 时间:2024/05/16 03:44
包 Package:
|-概念:包是用来存储相关程序结构的对象(它存储于数据字典中);
|-组成:包头(package) 和 包体(package body);
|-包头:包的说明部分,对外操作提供的接口,对应用是可见的;
http://wenku.baidu.com/link?url=N0Bjk_6QpK7iAjJ6LApjK32nYX-wfAIXFOAoZa0bi0UKZxkjnvxDY1ipqP8eW6_32nqtTQy6ZbWAsy53_1ZbcsE2JIefuFUUhdWFGXdq3Cq
|-概念:包是用来存储相关程序结构的对象(它存储于数据字典中);
|-组成:包头(package) 和 包体(package body);
|-包头:包的说明部分,对外操作提供的接口,对应用是可见的;
|-包体:包的SQL真正实现部分,对应用是不可见的;
包的结构:
|- procedure 存储过程
|- function 函数
|- variable 变量
|- constant 常量
|- cursor 游标
|- type 类型
|- exception 异常信息
各以上结构 可以出现在三个地方:
|- 在包头中:公有元素;--整个应用访问有效;
|- 在包体中:私有元素;--仅包内部访问有效;
|- 变量出现在包体中的procedure或function中 为局部变量;--仅此过程或函数访问有效;
在包体中出现的Procedure 和 Function 需在包头中预先定义;
包的优点:
|-将 存储过程 和 函数 有组织的组织起来,放在包中,利于外部调用;不同的包之间不会互相
影响;
|-提高了对 存储过程 和 函数 的访问安全;对非创建此包用户只需授权一次即可;
|-对于同一个用户访问过的变量值,将保留,供下次直接读取;
|-包 一次调用,便在内存贮存,减少了访问次数,减轻数据库压力;
包的创建和执行:
<span style="font-size:18px;">--包头的创建 create or replace package 包名 is 函数1; 函数2; 存储过程1; 存储过程2(param1 TYPE); ... end 包名; /--用斜杠来区分 包头 和 包体 --包体的创建 create or replace package body 包名 --包体的 包名 和 包头的 包名 一样的IS--声明变量 此变量用来接收表的每条记录 Variable1 表名%rowtype; --注意:变量名(employe) 不能和 表名(emp) 重名 --具体实现 函数1/函数2/存储过程1/存储过程2 我以 Procedure 示例 procedure 存储过程1(param1 TYPE) as begin select * into Variable1 from emp where ename = param1; exception when others then DBMS_OUTPUT.PUT_LINE('获取雇员信息 发生错误!'); end 存储过程1; end 包名;</span>注意:包的编译-->先编译 包头,再编译 包体;
<span style="font-size:18px;">--执行这个包的procedure EXECUTE 包名.存储过程1(param1); 实例 参考: procedure get_employe(p_empno number);end employe;/create or replace package body employeis--变量名employe 不能和 表名 employe 一样--employe emp%rowtype;--显示雇员信息--procedure show_detailasbeginDBMS_OUTPUT.PUT_LINE('---雇员信息---');DBMS_OUTPUT.PUT_LINE('雇员编号 :'||employe.empno);DBMS_OUTPUT.PUT_LINE('雇员名称 :'||employe.ename);DBMS_OUTPUT.PUT_LINE('雇员职务 :'||employe.job);DBMS_OUTPUT.PUT_LINE('雇员工资 :'||employe.sal);DBMS_OUTPUT.PUT_LINE('部门编号 :'||employe.deptno);end show_detail;--从emp表取得一个雇员--procedure get_employe(p_empno number)asbeginselect * into employe from emp where empno=p_empno;DBMS_OUTPUT.PUT_LINE('获取 '||employe.ename||' 信息成功');exceptionwhen others thenDBMS_OUTPUT.PUT_LINE('获取雇员信息 发生错误!');end get_employe;end employe;</span>参考文献:
http://wenku.baidu.com/link?url=N0Bjk_6QpK7iAjJ6LApjK32nYX-wfAIXFOAoZa0bi0UKZxkjnvxDY1ipqP8eW6_32nqtTQy6ZbWAsy53_1ZbcsE2JIefuFUUhdWFGXdq3Cq
0 0
- oracle 包 Package 的学习
- ORACLE PL/SQL包(package)学习笔记
- Oracle包(package的创建,调用)
- Oracle Package包的定义及使用
- Oracle Package中的包变量的使用
- Oracle 查询被锁的包package
- Oracle中包(PACKAGE)的使用方法
- oracle 包 (package)
- oracle plsql 包 package
- Oracle package 包详解
- Oracle 包(Package)
- Oracle 包(Package)
- Oracle 包(Package)
- ORACLE PACKAGE 包 详解
- Oracle 包(Package)
- ORACLE PACKAGE 包详解
- ORACLE PACKAGE 包
- Oracle 包(package)
- C语言位运算之异或 ^
- Problem - 1000_A + B Problem
- access
- SQL语句优化技术分析
- Minimum Path Sum Total
- oracle 包 Package 的学习
- windows下如何github ssh 公钥
- Android中VelocityTracker的简介
- Android app 的提醒功能
- UI04 实现计算器功能
- sendmsg在传输层的实现(一)
- B/S And C/S
- 调整TimePicker, DatePicker的大小,样式
- iOS里NSMutableArray 存取 CLLocationCoordinate2D