关于存储过程、包
存储过程是存储在数据库中的用户自定义的程序通俗叫法。
根据Oracle的操作手册,与SQL/PSM相似的功能可以分为以下三个部分,
·PL/SQL procedure / stored procedure (CREATE PROCEDURE~)
·PL/SQL function / stored function (CREATE FUNCTION~)
·PL/SQL package / stored package (CREATE PACKAGE~ & CREATE PACKAGE BODY~)
都以stored subprogram称呼,另外,stored procedure和stored function都定义为standalone subprogram。
关于Stored subprogram(stored procedure)
Oracle所谓的stored procedure就是PL/SQL中以Oracle独自“手续型”语言记述的具有名字的功能模块。
随便举个例子:
1. 接收入口参数
2. 访问数据库中的数据
3. 利用内部变量计算,处理
4. 对数据库的访问,更新,增加,删除等
5. 返回返回值
编写执行这样的一连串的处理的程序,然后
1. 把编写的源代码,或者是不太有把握的源代码存到数据库中
2. 把程序设为手动编译,或者是可以Oracle自动再编译的状态
3. 把编译完的程序在数据库服务器上执行
4. 把执行结果返回给客户端
这种能被Oracle DBMS存储并且执行的模块。
在Oracle数据库中,嵌入了PL/SQL的源代码编译器以及PL/SQL的执行引擎。最新的版本中带条件的编译器(Oracle 10g R2)和非中间代码native编译环境(Oracle 9i)也都具备了。
Stored procedure和stored function的区别
Function包括procedure的功能,可以说有了返回值的procedure就是function。与拥有返回值的procedure不同的地方就是SELECT expr FROM tablename中的expr的写法,如果把procedure写入select的话,如下,
SQL> select func_dummy() from dual; -- 可以调用function
FUNC_DUMMY()
------------
1
SQL> select proc_dummy() from dual; -- 不能识别procedure
select proc_dummy() from dual
*
1行出现错误。:
ORA-00904: "PROC_DUMMY": 无效的标记。
Procedure自身没有返回值,但是能够给调用返回一个返回值,不是以返回值的形式,而是以设定成OUT参数的形式,通过这个OUT属性的参数或者IN OUT属性的参数来返回结果值。
Standalone subprogram和stored package的差别
Stored package是stored procedure和stored function的集合,但是package里面不仅仅有这两种东西,它是各个模块的共同住宅,高级公寓一样的东西。
Package与procedure集合相比较明显的优点是:
·有可以共同利用的空间
·可以定义在package内共有而外部不可访问的变量,类型,procedure, function,用户子定义的例外等。
·可以声明同一session的package和procedure公开的public变量,procedure用户定义例外等。
·可以对package内的subprogram使用overload
·为了package不被从共有池里挤出来,可以在DBMS_SHARED_POOL package设定keep。
·有了package,简化了模块间的依存关系(对系统和对人的管理都简化了)
·与standalone subprogram相比,不容易发生共有池的溢出和再装载。同时还可以防止共有内存碎片化。
并不是只有这个可以设定package为单位,程序中也可以声明,package并不是具有了所有的优点。在很多情况下,package的可维护性良好是使用PL/SQL项目的基础。
Oracle存储过程与包详解
本文介绍了Oracle数据库中的存储过程和包的概念及用途。详细解释了存储过程如何存储和执行,以及存储过程与函数的区别。此外,还探讨了包作为存储过程和函数集合的优势。
680

被折叠的 条评论
为什么被折叠?



