在存储过程或函数里调用oracle包的话,首先要有执行这个包的权限;如果包属于其他的用户(不是系统包),调用时:用户名.包名.存储过程(参数)名或者
创新互联公司联系电话:18980820575,为您提供成都网站建设网页设计及定制高端网站建设服务,创新互联公司网页制作领域十年,包括服务器租用等多个行业拥有多年的网站制作经验,选择创新互联公司,为企业保驾护航。
变量:=用户名.包名.函数(参数);因为函数有返回值,变量类型要跟函数返回值的类型一致。
在command
下调用的话:exec
用户名.包名.存储过程名(参数);select
用户名.包名.函数名(参数)
from
dual;就可以了。包属于当期用户可以不写用户名。
1、首先是编写存储过程,编译无误;
2、添加debug信息。为了能够单步跟踪存储过程,需要为其所在的包添加debug信息,右键点击需要调试的存储过程名称,在弹出菜单中选中[add debug information],这样就为包体添加了调试信息;
3、选择需要调试的存储过程名称,点击右键,在弹出菜单中 选择[Test],进去测试窗口,测试窗口中有为了测试该存储过程自动所产生的代码,当然你也可以自己另外加入和修改代码,自动生成的代码已经足够了。
包只是作为 程序的一个载体而已,你要运行,当然是去调用它!
包里面可以包含函数、过程等,你可以开发程序时候调用包里面的这些程序!没有听说过包怎么运行的道理!
就像电视机(包)可以用来看电视,但是你不去打开它(调用包),它就没有作用!
楼下的明显误导别人啊,包何来参数之说?只有包里面的程序才有参数,调用包里面过程的方法如下:
begin
exec 包名.过程名();
end;
函数的调用就不用我写了吧!
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成
1.创建包
--创建一个包sp_package
create package sp_package is
--声明该包有一个过程和函数,(没有实现)
procedure update_sal(name varchar2,newsal number);
function annual_nicome(name varchar2) return number;
end;
--创建包体(用于实现已经声明的函数和过程)
create package body sp_package is
procedure update_sal(name varchar2,newsal number)
is
BEGIN
UPDATE emp
SET sal = newsal
WHERE ename = name;
END;
function annual_income(name varchar2)
return number is
annual_salary number;
BEGIN
SELECT sal * 12 + Nvl(comm,0)
INTO annual_salary
FROM emp
WHERE ename = name;
RETURN annual_salary;
END;
end;
--调用包中的内容
exec sp_package.update_sal('name',number);
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款