设为首页 收藏本站
查看: 877|回复: 0

[经验分享] Oracle数据库之PLSQL包

[复制链接]

尚未签到

发表于 2016-8-12 06:47:49 | 显示全部楼层 |阅读模式
--=======PLSQL包=========
--首先我们来1个function , 1个procedure
create or replace function
f1(id in number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno = id;
return v_sal;
end;
create or replace procedure p1
(id in number ,v_sal out emp.sal%type)
is
begin
select sal into v_sal from emp where empno = id;
end;
-- ==ok ,现在调用上述的过程跟函数
declare
v_sal emp.sal%type;
begin
dbms_output.put_line(f1(7900)); --调用函数
p1(7900,v_sal); --调用过程
dbms_output.put_line('procedure v_sal emp.sal%type:'|| v_sal);
end;
--======把不同的相关对象存储在一起,就要用到包.
--即表示 把上述的function ,procedure 合成一个
--包:包含两部分
--声明:用于定义包的公共组件,如函数头,过程头,游标等以及常量,变量等。
--     包头中定义的公共组件可以在包内引用,也可以被其它子程序引用。
-- body 实现:用于定义包头中定义过的过程和函数。可以单独定义私有组件,
-----------包括变量,常量,过程和函数等。
-------私有组件只能在包内使用,而 不能被其它子程序所调用。

--对于应用来说 包声明是一个可见的接口,对应用来说是可见的。
--包体是黑盒,对应用来说隐藏了实现的细节
--定义包头
CREATE [OR REPLACE] PACKAGE package_name     
{AS|IS}
public_variable_declarations | --公共变量
public_type_declarations | --公共类型
public_exception_declarations |  --公共异常
public_cursor_declarations |--公共游标
function_declarations | --函数声明
procedure_specifications--过程声明
END [package_name]  
--定义包体,包体中的package_name应当与包头中的package_name相同
CREATE [OR REPLACE] PACKAGE BODY package_name  
{AS|IS}  
private_variable_declarations |
private_type_declarations |
private_exception_declarations |
private_cursor_declarations |  
function_declarations |   --函数实现,调用1次执行1次
procedure_specifications --过程实现,调用1次执行1次
begin
初始化代码 --首次调用包中的任意对象执行1次
END [package_name]  
--=============使用包有哪些优点? =============
--1.将相关的函数和过程组织在一起
--2.在一个用户环境内解决命名问题
--3.在不改变包声明的前提下 可以改变包体的实现
--4.限制过程,函数的依赖性
--5.整个包的访问权限只要1次授权
--6.区分私有过程,共有过程
--7.在包首次被调用时作为一个整体读入内存,减少多次调用时的磁盘I/O 次数
---------创建包头
create or replace package pkg1
is
type t_rec is record( --声明类型
n1 number ,
n2 varchar2(10)
);
v_rec t_rec; --定义公共变量
procedure proce1 ; --声明过程
function fun1(p2 in number)  return varchar2; --声明函数
end;
--创建包体
create or replace package body pkg1
is
--过程实现
procedure proce1
is
begin
dbms_output.put_line('v_rec ' || v_rec.n1);
end;
--函数实现
function fun1(p2 in number ) return varchar2
is
begin
return v_rec.n2||p2;
end;
begin
v_rec.n1 :=100; --初始化在包头声明的变量
v_rec.n2 :='aaa';
end; --结束包体
--=================调用
declare
v_str varchar2(10); --接收function返回的结果
begin
v_str :=pkg1.fun1(10);--调用函数
dbms_output.put_line('v_str ' || v_str);
pkg1.proce1;--调用过程
end;
--查看包头
select line,text from user_source  where name='PKG1' and type='PACKAGE';
--查看包体
select line,text from user_source  where name='PKG1' and type='PACKAGE BODY';
--删除
drop package PKG1;

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256526-1-1.html 上篇帖子: oracle imp 与exp 参数说明 下篇帖子: Oracle数据库之PLSQL函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表