更改程序包和包体PL/SQL

rad*_*scu 4 oracle plsql stored-procedures oracle11g

我想为我的oracle数据库创建一个递增的脚本.我想只修改一个过程签名和它的正文,其余的应该保持不变.

如何在不使用创建或替换重新创建孔包的情况下实现此目的?


老包

PROCEDURE LOAD_ITEMS(OUTCURSOR OUT SYS_REFCURSOR);
Run Code Online (Sandbox Code Playgroud)

新包装

PROCEDURE LOAD_ITEMS(P_ID IN CHAR, OUTCURSOR OUT SYS_REFCURSOR);
Run Code Online (Sandbox Code Playgroud)

编辑:
通过增量脚本,我的意思是从先前版本升级到此版本.我想只修改当前的程序,而不是所有程序.

Pet*_*ang 20

如果要更改包规范中的过程,则需要
CREATE OR REPLACE
使用更改的代码来处理整个包规范和正文.


虽然该ALTER PACKAGE语句可用于重新编译整个包,但它

[...]不会更改现有包裹的声明或定义.要重新声明或重新定义包,请使用CREATE PACKAGECREATE PACKAGE BODY带有该OR REPLACE子句的语句.

  • 很高兴知道为什么这会被低估,所以我可以纠正我的答案...... (4认同)
  • 那没关系.包是数据库中的单个对象; 您无法替换正文中的单个过程/类型/功能.你必须定义整个身体.当您更改包规范中存在的过程的定义时,您也必须重新定义它. (4认同)
  • +1彼得是正确的:没有办法做到这一点.PACKAGE SPEC和PACKAGE BODY是最小的变化单位. (4认同)
  • 请参阅此链接http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2005.htm (3认同)