发布网友 发布时间:2022-04-28 21:34
共2个回答
懂视网 时间:2022-05-01 19:10
一 包的组成
1)包头(package):包头部分申明包内数据类型,常量,变量,游标,子程序和异常错误处理,
这些元素为包的公有元素。
2)包主体(package body):包主体则是包定义部分的具体实现,它负责为包头中所声明子程序
提供具体的实现,在包主体中还可以声明包的私有元素
3)包头和包主体分开编译,并作为两个分开的对象分别存放在数据库字典中
--删除package
--drop package pkg_lxg_test;
--1)首先创建package头(头和body的sql不要写在同一个文件中执行)
---- 这里可以声明多个procedure(如果外部调用才声明)
create or replace package pkg_lxg_test as
procedure deleteTask(taskTypeCode in varchar2, --任务类型代码
businessKey in varchar2, --业务号
resultCode out varchar2, --结果代码
resultMessage out varchar2 --结果信息
);
end pkg_lxg_test;
--)2 再创建package体(上面的头不能和体一起执行,移交时应该写成两个sql文件进行移交)
--)3 创建完成后,如果创建成功了会自动编译的
--)4 如果在创建package不成功的话,在查看和说明中可以查看到错误
--)5 package创建完成后,-->右键,查看--->然后选中你要测试的package中的proc点击右键---》测试
CREATE OR REPLACE PACKAGE BODY NBADATA.pkg_lxg_test AS
function function2(taskTypeCode in varchar2,businessKey in varchar2) return varchar2
is
v_preview_environment varchar2(4);
v_voucher_no varchar2(50);
v_count number default 0;
begin
v_preview_environment:= ‘1‘;
--dbms_output.put_line(‘执行了方法function2‘);
return v_preview_environment;
end function2;
--这里定义procedure,可以定点多个
procedure deleteTask(taskTypeCode in varchar2, --任务类型代码
businessKey in varchar2, --业务号
resultCode out varchar2, --结果代码
resultMessage out varchar2 --结果信息
) IS
begin
begin
resultCode := ‘0‘;
resultMessage := ‘delete asynchrouns task sucess‘;
--dbms_output.put_line(‘成功执行了存储过程‘);
exception
when others then
resultCode := ‘1‘;
resultMessage := ‘fail in deleting asynchrouns task sucess‘;
end;
end deleteTask;
end pkg_lxg_test;
/
oracle包的创建
标签:oracle package
热心网友 时间:2022-05-01 16:18
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成
1.创建包
--创建一个包sp_package
create package sp_package is
--声明该包有一个过程和函数,(没有实现)
procere update_sal(name varchar2,newsal number);
function annual_nicome(name varchar2) return number;
end;
--创建包体(用于实现已经声明的函数和过程)
create package body sp_package is
procere 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);