【发布时间】:2021-02-28 19:26:27
【问题描述】:
我的目标是通过 java 中的数据库链接调用一个过程。过程接受一个输入并将光标作为输出。 为了检查我的代码是否正常工作,我在我的数据库中创建了虚拟程序并尝试执行。它正在工作,能够获得光标并使用它。 但是,当我通过数据库链接调用某些过程时,出现错误
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'HR_CLICK_GET_EMP_DETAILS@IBSLUAT1.WORLD' must be declared
我与创建这些程序的开发人员通话。据他说,程序存在于此,我的用户已经获得了访问权限。
现在我的问题和疑问是
-
有什么不同的吗,我在通过数据库链接调用过程时必须做(代码如下)
-
我应该向 sql developer 询问哪些事情。顺便说一下数据库链接是对的。
String prc_name = "HR_CLICK_GET_CM_AND_ABOVE@IBSLUAT1.WORLD(?,?)"; String runSP = "{ call "+prc_name+" }"; String runSP1 = "{ call get_user_by_userId(?,?) }"; this one is working try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@xx.xx.xxx.xx:port:SERVICE", "username", "password"); // uat CallableStatement cs = conn.prepareCall(runSP); cs.setString(1, "705151"); cs.registerOutParameter(2, OracleTypes.CURSOR); cs.execute(); // get refcursor and convert it to ResultSet ResultSet resultSet = (ResultSet) cs.getObject(2); ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); System.out.println("Total Columns in ResultSet : "+columnCount); System.out.println("Now Analyzing column one by one:\n\n-----------------------------------------------"); for (int i = 1; i <= columnCount; i++ ) { String name = rsmd.getColumnName(i); System.out.println("Column No:"+i+">>>>>>>>"+name); } } catch(SQLException s) { s.printStackTrace(); } catch(ClassNotFoundException s) { s.printStackTrace(); }
提前致谢
阿什
【问题讨论】:
-
那么您是从 Java 连接到第一个数据库并在第二个数据库上调用过程吗?您可以直接连接到第二个数据库。或者,您可以在第一个数据库的过程中隐藏 db 链接,以便 Java 对 db 链接一无所知。
标签: java oracle stored-procedures plsql dblink