sql—替换包中的过程(oracle 11+)

kokeuurv  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(292)

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

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过程(并且成功地创建了包pack\u测试)。
我可以在不修改和重新提交整个包体代码的情况下替换包中的过程吗?

kmynzznz

kmynzznz1#

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

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

在一个包中,将对象(如过程和函数)视为一个集合,这些对象存储在一起用于函数目的。当需要修改包体中的过程或函数时,可以通过执行create或replace package body语句来修改包体
希望能澄清。

相关问题