数据库程序设计7 包

目录

包的创建

包声明

创建包体

删除包

开发包的原则

内置包

动态SQL

本地动态SQL


打包了相关的PL/SQL类型、子程序到一个容器中。

两个部分组成:

  • 声明

注意:

  1. 包本身不能被调用、被参数化或被嵌套
  2. 允许Oracle服务器一次读多个对象到内存中
  3. 用户只能访问程序包的包头部分,包体被隐藏

可以考虑成一个类,和面向对象有相通之处。

包的声明和包体可以放在不同的文件中,方便管理。

包的创建

包声明

语法:

CREATE [OR REPLACE] PACKAGE
package name
IS| AS
    公共变量、异常、游标、子程序等声明
END
package name;

例子:

CREATE OR REPLACE PACKAGE comm package
IS
    g comm    NUMBER := 100 ;
    PROCEDURE reset comm(p comm IN NUMBER) ;
END comn package;

创建包体

CREATE OR REPI ACE PACKAGE BODY
    package_ name
IS
    私有的变量、静态变量、游标、异常、类型、子程序、子程序体
END package name;

这里注意:

  • 在包体中定义的标识符是私有结构,在包的外部不可见
  • 在包体中先定义私有变量和子程序,后定义公共子程序

另外,创建函数和之前的函数是一样的。

删除包

语法:

DROP PACKAGE package_name;
DROP PACKAGE BODY package_name;//只删除包体

开发包的原则

  1. 先定义包声明,再定义包体
  2. 包声明中应该只包含公共结构
  3. 改变包的声明需要重新编译每个涉及到的子程序
  4. 包体的变化不要求重新编译包的声明
  5. 包声明应该尽可能包含少的内容

使用包可以获得更好的封装性及模块性,另外可以提升性能。

内置包

oracle提供的包,扩展了数据库的功能,使用时可以省略包名。

动态SQL

SQL语句经历的阶段:

  • 解析(Parse)
  • 绑定(Bind)
  • 执行(Excute)
  • 取回(Fetch)

注意:大量频发访问的尽量使用绑定变量,持久化数据尽量使用占位符

动态SQL效率较低

本地动态SQL

语法

EXECUTE IMMEDIATE '动态SQL'
[INTO 变量列表]
[USING 绑定参数列表] ;

注意:只能返回一行结果

例子:

CREATE OR REPLACE PROCEDURE del rows
    (p_table_name IN VARCHAR2,p_rows_deld OUT NUMBER)
IS
    V_str varchar2(50);
BEGIN
    v_str:= 'delete from '||I p_table_name ||' where sal> 3000';
    EXECUTE IMMEDIATE v_str;
    p_rows_deld := SQL%ROWCOUNT;
END;

表名在执行的时候才能确定。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值