create procedure proc1
(
begin
end;
)
create package pkg1
(
procedure proc2
begin
end;
)
答案 0 :(得分:4)
这些都是存储过程,因为它们都存储在数据库中,以后可以调用。
将程序放在包中只是组织它们的一种巧妙方法。它有助于记住一起更新所有相关程序,保持创建脚本整洁等。主要功能区别在于能够授予和撤销整个包的权限,而不必管理十几个独立的" #34;程序独立。
答案 1 :(得分:3)
独立程序是存储在数据库中的程序(执行特定操作的子程序)。
nested procedure是PL / SQL块或包中的过程。
来自CREATE PACKAGE
文档:
CREATE PACKAGE语句创建或替换存储包的规范,存储包是数据库中作为一个单元存储的相关过程,函数和其他程序对象的封装集合。包规范声明了这些对象。随后指定的包体定义了这些对象。
嵌套在包中的独立过程和过程都存储(编译)在数据库中 - 因此是“存储”过程。匿名PL / SQL块中定义的过程不是“存储”过程。
这不是存储过程:
DECLARE
n NUMBER := 1;
PROCEDURE incr( a IN OUT NUMBER ) IS
BEGIN
a := a + 1;
END;
BEGIN
incr(n);
DBMS_OUTPUT.PUT_LINE(n);
END;
/
包和独立过程中的嵌套过程之间没有太大的区别:
CREATE PROCEDURE ...
定义独立过程,而使用PROCEDURE ...
在PL / SQL块中定义嵌套过程。AS BEGIN ... END;
部分),但是一个包中的(公共)嵌套过程只声明过程标题(PROCEDURE NAME(...)
部分)然后在包体中将重述标题并定义程序定义。