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

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执行时失败 .

Update : 如果我使用类似"BEGIN schema_name.x_pkg.proc_name; END;"的模式名称作为前缀,它的过程调用会成功

任何想法何时应该为模式名称添加前缀以及何时不需要?

Update : 实际的包名称是"COMMONS_UTILS",过程名称是"SET_SESSION_NLS_PARAMS" . 通过JDBC进行调用"BEGIN COMMONS_UTILS.SET_SESSION_NLS_PARAMS; END;"失败 . 如果我将过程名称重命名为"SET_SESSION_NLS_PARAMSX",它可以工作 .

Update : 如果在执行之前编译它,则过程调用有效 .

“BEGIN EXECUTE IMMEDIATE'ALTER PACKAGE COMMONS_UTILS COMPILE'; COMMONS_UTILS.SET_SESSION_NLS_PARAMS; END;”