我在Weblogic Server上运行Java应用程序并连接到Oracle 11g DB服务器。
在应用程序中,我调用DB Procedure并将参数传递给它,该参数通信并调用多个其他过程。
当我独立测试程序时,它完美且按预期工作。
当我从Java应用程序调用过程时出现问题。
程序出错:
ORA-06508:PL / SQL:找不到被调用的程序单元
Backtrace导致调用另一个Schema中存在的过程,并且在当前模式中具有同义词。
如果其他人遇到同样的问题或类似问题,请提供帮助。
编辑#1: 调用DB Proc的示例代码
CallableStatement cstmt = null;
private Connection dbConn = null;
HashMap hashMap = new HashMap();
hashMap.put(DBDRIVER, driverType);
hashMap.put(USERID, userName);
hashMap.put(PASSWORD, password);
hashMap.put(SID, dbName);
hashMap.put(IPADDRESS, intDBServer);
hashMap.put(PORT, dbPort);
dbConn = (Connection)cmmObj.connect(hashMap);
cstmt = dbConn.prepareCall(queryToRun);
cstmt.setString(1, ReqId);
cstmt.executeUpdate();
Proc Call是{call Proc_CALL(?)}
答案 0 :(得分:0)
听起来好像你的同义词是错误的方式 - 调用架构需要被调用过程的同义词+执行权限。
答案 1 :(得分:0)
我可能已经发现了这个问题。虽然它听起来很奇怪,但似乎有效:
我正在处理的系统有3个Schema连接。
一个是进行所有调用的Staging Schema。 第二个是调用的主模式。调用程序存在于此模式中。
第三个是另一个模式,其中存在一个从主模式过程调用的过程。
简化为:
StageSchema.Caller(同义词) - >>
MainSchema.Proc_Call(程序) - >>
CoSchema.insideCall(程序)。
CoSchema的资助可用于主模式,但不适用于阶段模式。
虽然根据理论,如果将任何过程授予模式,那么对任何其他过程的所有内部调用都无关紧要。
但在这种情况下,当我向Stage Schema提供赠款时,一切似乎都完美无缺。
如果有人对此有解决方案,请分享原因。