0

我们在一个名为 x_pkg.proc_name 的 oracle 包中声明了一个过程。当通过 java.sql.Statement.execute("BEGIN x_pkg.proc_name; END;"); 从 jdbc 调用时 调用失败并出现错误

java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'x_pkg.proc_name' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

上述错误表明该过程未在给定包中声明。如果我将过程重命名为 x_pkg.proc_name_something,jdbc 调用会出人意料地成功。这似乎很奇怪。我尝试删除过程声明及其主体并重新添加它,但我得到了同样的错误。

有关进一步解决此问题的任何建议?

注意 - 过程调用总是通过 pl-sql 代码成功。它只是在通过 jdbc 执行时失败。

更新: 如果我在它前面加上“BEGIN schema_name.x_pkg.proc_name; END;”之类的模式名称,它的过程调用就会成功

知道什么时候应该为模式名称加上前缀,什么时候不需要?

更新: 实际的包名称是“COMMONS_UTILS”,过程名称是“SET_SESSION_NLS_PARAMS”。调用“BEGIN COMMONS_UTILS.SET_SESSION_NLS_PARAMS; END;” 通过 JDBC 进行时失败。如果我将过程名称重命名为“SET_SESSION_NLS_PARAMSX”,它会起作用。

更新: 如果我在执行它之前编译它,则该过程调用有效。

"开始立即执行'ALTER PACKAGE COMMONS_UTILS COMPILE';COMMONS_UTILS.SET_SESSION_NLS_PARAMS;结束;"

4

0 回答 0