我在包中创建一个过程。我已经更新了包的规格,然后当我更新包的主体时,它向我显示以下错误。
[错误] PLS-00323(314:13):PLS-00323:子程序或游标'INSERT_CUSTOMER_ADDRESS'在包规范中声明,必须在包体中定义
N.B。:INSERT_CUSTOMER_ADDRESS是我的程序名称。
答案 0 :(得分:2)
如果在包规范中创建过程,则必须在包主体中创建\实现。将您的包规范视为接口,将包体视为其实现。
答案 1 :(得分:2)
pkg规范和pkg主体上的声明应始终相同。
这意味着在pkg规范中声明的过程/函数(包括过程/函数的名称,参数类型)应该完全相同。
注意:当oracle为上述错误情况编译pkg时,它不会给你确切的行号。
答案 2 :(得分:1)
规格:功能项目活动( SKU_NUM 在数字中)返回布尔;
正文:FUNCTION ITEM_ACTIVE( P_SKU_NUM IN NUMBER)返回布尔;
更改规格或正文以使其完全匹配。
HTH!
答案 3 :(得分:1)
因为某些人的旧错误对我来说总是新闻,我会加3美分:
有人删除了他们的规格,但仍然有身体(不,我不知道怎么做),他们并不想在#34;中输入所有内容。
所以我告诉他们如何从身体生成规范:
只有魔法没有发生 - 一切都变红...... PLS-00323错误。
SQL Developer通过从代码本身拉出过程和函数头来填充程序包规范,因此您不必担心陷入困境。它显示了要添加到包/规范的对象列表,您可以选择要添加的对象。
我们选择了正确的程序和功能,但编译时出错。再次。而且,再次。
事实证明,抛出错误的函数是在包体中使用DETERMINISTIC定义的 - 当SQL Dev的编辑器执行同步时,它会遗漏该单词。这非常重要。
无论如何,在分号前检查,粘贴DETERMINISTIC特定功能,保存(重新编译),然后再次变得神奇。
您希望SQL Developer能够完成所有工作,而不是半工作。