oracle_开发子程序和包
包(package)用于组合逻辑相关的PL/sql类型的(例如:table 类型和record类型),pl/sql 项(列如:游标,和游标变量)和pl/sql子程序(例如:过程和函数)
通过使用pl/sql包不仅可以简化应用设计,提高应用 的性能,还可以实现信息的隐藏,子程序重载等功能。
下面就针对计算圆的面积来做个演示:
1—创建包规范
create or replace package dbutil_package is pi constant number(10,7):=3.1415926;--定义常量pi function gatarea(radius number) return number;--计算圆的面积 procedure print_area;--输出圆的面积 end dbutil_package;
执行完上面的命令后创建一个包规范duitil_package,且定义了所有的公用的组件。但是这里只是定义了过程和函数的头部,并没有编写可执行的代码,所以公用的过程和函数
只有在创建了包实体后才能调用。
2—创建包实体
create or replace package body dbutil_package is area number(10);--定义局部变量 function getarea(radius number) return number is begin area:=pi*radius*radius; return area; end; procedure print_area is begin dbms_output.put_line('圆的面积是:'||area); end; end dbutil_package;
is开始的部分定义为私有的组件,并实现包规范中所定义的公用过程和函数,此外包体名和包规范的名字必须相同,
3—使用包中的组件
declare area number(10,7);--声明一个变量 begin area:=dbutil_package.getarea(3);--给变量赋值 dbms_output.put_line(dbutil_package.getarea(3));--输出变量的值 end;
*1.在同一个包内调用组件
调用时可以直接调用,不需要添加包名作为前缀。
*2.调用包的公用变量
在其他应用中调用包的公用变量必须要在公用变量的名前添加包名作为前缀并且其数值在当前会话内一直生效。
*3调用包的公用子程序
当在其他的应用中调用包的公用过程时,必须在公用的过程名前添加包作为前缀。
declare area number(10,7); begin area:=dbutil_package.getarea(3);--必须要在公用的过程名前添加包做为前缀。 dbms_output.put_line(area); end; --执行完了之后会输出 28.2743334
*子程序和包的管理
在创建子程序之后,Oracle 会将子程序名及其源代码信息放在数据字典中。通过查询数据字典user_source,显示当前用户所用程序及源代码。
删除:drop procedure proce_sum
drop pachage body;
drop package;