从Java调用时,DB中的过程不起作用

时间:2012-10-25 11:22:55

标签: java sql oracle java-ee jdbc

我在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(?)}

2 个答案:

答案 0 :(得分:0)

听起来好像你的同义词是错误的方式 - 调用架构需要被调用过程的同义词+执行权限。

答案 1 :(得分:0)

我可能已经发现了这个问题。虽然它听起来很奇怪,但似乎有效:

我正在处理的系统有3个Schema连接。

一个是进行所有调用的Staging Schema。 第二个是调用的主模式。调用程序存在于此模式中。

第三个是另一个模式,其中存在一个从主模式过程调用的过程。

简化为:

  

StageSchema.Caller(同义词) - >>

     

MainSchema.Proc_Call(程序) - >>

     

CoSchema.insideCall(程序)。

CoSchema的资助可用于主模式,但不适用于阶段模式。

虽然根据理论,如果将任何过程授予模式,那么对任何其他过程的所有内部调用都无关紧要。

但在这种情况下,当我向Stage Schema提供赠款时,一切似乎都完美无缺。

如果有人对此有解决方案,请分享原因。