【发布时间】:2019-02-19 04:55:05
【问题描述】:
我知道最常见的问题是名称或参数不同。 除非我的眼睛真的很差,否则这里不是这样:
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 年 9 月 17 日更新: 嗯,这很奇怪......我删除了整个代码并再次输入,现在错误消失了。
当我在完整代码中执行相同操作时,该过程的错误消失了 - 但在更下方的过程中再次出现,不是直接下一个,而是之后的一个。
我在 Visual Studio 2017 中的 .sql 文件中输入了它,在我重新输入之前和之后,我都从那里复制了代码以在 SQLPlus 中执行。会不会是一些编码问题? VS 说带有签名的 UTF-8,代码页 65001,行尾 = 当前设置。我的 Oracle 数据库使用 NLS_CHARACTERSET = WE8MSWIN1252
【问题讨论】:
-
您的规范似乎没有正确编译。
-
一般不会这么说吧?就像我说的,同样的代码在另一个数据库上也能正常工作。
标签: plsql