oracle中的PLS-00323错误

时间:2011-07-21 09:55:41

标签: plsql oracle10g

我在包中创建一个过程。我已经更新了包的规格,然后当我更新包的主体时,它向我显示以下错误。

  

[错误] PLS-00323(314:13):PLS-00323:子程序或游标'INSERT_CUSTOMER_ADDRESS'在包规范中声明,必须在包体中定义

N.B。:INSERT_CUSTOMER_ADDRESS是我的程序名称。

4 个答案:

答案 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;中输入所有内容。

所以我告诉他们如何从身体生成规范:

  1. 将正文复制到工作表中。
  2. 在主体上方插入一个带有包名称的空标题。
  3. 编译。
  4. [无论是否收到错误,]右键单击Packages树中的包体,然后选择" Synchronize Specification and Body"。
  5. 选择要在规范中公开的对象,然后单击“确定”。
  6. "魔术发生"
  7. 只有魔法没有发生 - 一切都变红...... PLS-00323错误。

    SQL Developer通过从代码本身拉出过程和函数头来填充程序包规范,因此您不必担心陷入困境。它显示了要添加到包/规范的对象列表,您可以选择要添加的对象。

    我们选择了正确的程序和功能,但编译时出错。再次。而且,再次。

    事实证明,抛出错误的函数是在包体中使用DETERMINISTIC定义的 - 当SQL Dev的编辑器执行同步时,它会遗漏该单词。这非常重要。

    无论如何,在分号前检查,粘贴DETERMINISTIC特定功能,保存(重新编译),然后再次变得神奇。

    您希望SQL Developer能够完成所有工作,而不是半工作。