sql - 替换包中的过程 (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)。
我可以在不修改并重新提交整个包体代码的情况下替换包中的过程吗?
解决方案
语法错误。如果要替换包体内的过程,则需要替换包体。如果不替换主体本身,则无法替换包内的过程。
SQL> CREATE OR REPLACE PACKAGE BODY pack_test IS
PROCEDURE proc_test() IS
...
END proc_test;
END pack_test;
将包视为为了功能目的而存储在一起的对象集合(作为过程和函数)。当您需要修改包体内的过程或函数时,您可以通过执行语句CREATE OR REPLACE PACKAGE BODY来修改包体
希望它澄清。
推荐阅读
- azure-sql-database - Pyodbc Azure sql 数据库
- python - 如何让我的播放器与物体发生碰撞?
- kerberos - 如何访问 Ticket Granting Ticket?
- python - Python 2.7 和 Python 3.9 的结果完全不同
- git - 如何在保留特定分支和维护替换引用的同时从 git 存储库中删除死/大文件?
- python - 如何将 Pytorch 张量拆分为不同的维度?
- javascript - Braintree GraphQL - 将查询与 chargePaymentMethod 和 updateCustomer 突变相结合
- java - 谷歌云资源管理器V3 java客户端调用失败
- flutter - 如何跳转/隐藏第一个索引?颤动
- python - 在 Python 中使用 Lambda 函数、Map 和 Reduce 算法将两个矩阵相乘