首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle中的存储过程和独立过程有什么不同?

Oracle中的存储过程和独立过程有什么不同?
EN

Stack Overflow用户
提问于 2015-07-08 15:28:49
回答 2查看 22.5K关注 0票数 4

单机程序

代码语言:javascript
运行
复制
create procedure proc1
(
begin

end;
)

存储过程

代码语言:javascript
运行
复制
create package pkg1
(
procedure proc2
begin

end;
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-08 17:16:57

来自CREATE PROCEDURE的oracle文档

独立过程是存储在数据库中的过程(执行特定操作的子程序)。

nested procedure是位于PL/SQL块或程序包中的过程。

CREATE PACKAGE文档中:

CREATE package语句创建或替换存储包的规范,存储包是作为一个单元存储在数据库中的相关过程、函数和其它程序对象的封装集合。包规范声明了这些对象。随后指定的包体定义了这些对象。

独立过程和包中嵌套的过程都存储(编译)在数据库中--“存储”过程也是如此。匿名PL/SQL块中定义的过程不是“存储”过程。

这不是存储过程:

代码语言:javascript
运行
复制
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;
/

包中的嵌套过程和独立过程之间并没有太大的区别:

独立过程是使用PROCEDURE ....

  • A定义的独立过程,而嵌套过程是使用CREATE PROCEDURE ...在PL/SQL块中定义的,而包中的(公共)嵌套过程总是需要过程定义( AS BEGIN ... END;部分),而包中的(公共)嵌套过程只声明过程标题( PROCEDURE NAME(...)部分),然后在包体中将重新声明标题并定义过程definition.

  • Nesting包中的过程允许它以类似的功能分组并允许它访问函数,包私有的过程和数据(即,在包体中定义,但不在公共包specification).

中定义

票数 3
EN

Stack Overflow用户

发布于 2015-07-08 15:31:57

这两个都是存储过程,因为它们都存储在数据库中,可以在以后调用。

将过程放在包中只是组织它们的一种整洁的方式。它有助于记住一起更新所有相关的过程,保持你的创建脚本整洁,等等。主要的功能差异是能够授予和撤销整个包的特权,而不是必须独立管理十几个“独立”过程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31286156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档