首页 > 解决方案 > 替换包中的过程 (Oracle 11+)

问题描述

我用程序成功创建了包和包体。

CREATE OR REPLACE PACKAGE pack_test IS
  PROCEDURE proc_test();
END pack_test;

CREATE OR REPLACE PACKAGE BODY pack_test IS
  PROCEDURE proc_test() IS
    ...
  END proc_test;
END pack_test;

但是当我尝试将此过程替换为:

CREATE OR REPLACE PROCEDURE pack_test.proc_test() IS
   ..... 
END pack_test.proc_test;

我得到错误:

Error report - ORA-01031: Insufficient privileges
*Cause:    An attempt was made to perform a database operation without the necessary privileges

但是我已经授予 CREATE PROCEDURE (并且我成功创建了包 pack_test)。

我可以在不修改并重新提交整个包体代码的情况下替换包中的过程吗?

标签: sqloracleplsql

解决方案


语法错误。如果要替换包体内的过程,则需要替换包体。如果不替换主体本身,则无法替换包内的过程。

SQL> CREATE OR REPLACE PACKAGE BODY pack_test IS
  PROCEDURE proc_test() IS
    ...
  END proc_test;
END pack_test;

将包视为为了功能目的而存储在一起的对象集合(作为过程和函数)。当您需要修改包体内的过程或函数时,您可以通过执行语句CREATE OR REPLACE PACKAGE BODY来修改包体

希望它澄清。


推荐阅读