我知道最常见的问题是名称或参数不同。 除非我的眼睛真的很不好,否则这里不是这种情况:
CREATE OR REPLACE PACKAGE my_api IS
PROCEDURE sync_batch(x_return_status OUT VARCHAR2);
END my_api;
/
CREATE OR REPLACE PACKAGE BODY my_api IS
PROCEDURE sync_batch(x_return_status OUT VARCHAR2) IS
BEGIN
x_return_status := 'test';
END sync_batch;
END my_api;
/
结果是:
PACKAGE BODY MY_API错误:PLS-00323:子程序或游标'SYNC_BATCH'在程序包规范中声明,并且必须在程序包主体中定义。
当我在测试环境中使用sqlplus 11.2.0.1.0 64位连接到12.1.0.2.0 64位数据库时,会发生这种情况。 当我使用sqlplus 11.2.0.1.0连接到客户的11.2.0.1.0 64位数据库时,不会发生这种情况。 我可以添加更多过程,但是此sync_batch过程总是会发生错误。重命名该程序也不能解决问题,因此我认为它不是保留名称或其他名称。
有人知道还有什么原因吗?
更新2018-09-17: 好吧,这很奇怪...我删除了整个代码,然后再次键入,现在错误消失了。
当我在完整的代码中执行相同的操作时,该过程的错误消失了-但在更远的过程中再次出现,不是直接出现在下一个过程中,而是出现在下一个过程中。
在我重新键入它之前和之后,我都在Visual Studio 2017中的.sql文件中键入了它,然后从那里复制了代码以在SQLPlus中执行。可能是一些编码问题吗? VS说带有签名的UTF-8,代码页65001,行尾=当前设置。我的Oracle数据库使用NLS_CHARACTERSET = WE8MSWIN1252