替换包中的过程 (Oracle 11+)

Sor*_*and 0 sql oracle plsql

我使用过程成功创建了包和包主体。

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;
Run Code Online (Sandbox Code Playgroud)

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

CREATE OR REPLACE PROCEDURE pack_test.proc_test() IS
   ..... 
END pack_test.proc_test;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error report - ORA-01031: Insufficient privileges
*Cause:    An attempt was made to perform a database operation without the necessary privileges
Run Code Online (Sandbox Code Playgroud)

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

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

Rob*_*dez 5

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

SQL> CREATE OR REPLACE PACKAGE BODY pack_test IS
  PROCEDURE proc_test() IS
    ...
  END proc_test;
END pack_test;
Run Code Online (Sandbox Code Playgroud)

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

希望它能澄清。