这里我的目标是在java中通过数据库链接调用一个过程。过程接受一个输入,并将游标作为输出。为了检查代码是否正常工作,我在数据库中创建了虚拟过程并尝试执行。它正在工作,能够得到光标和发挥它。但是,当我通过数据库链接调用某个过程时,得到的错误是
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'HR_CLICK_GET_EMP_DETAILS@IBSLUAT1.WORLD' must be declared
我和创建这些过程的开发人员打过电话。据他说,程序存在于这一端,访问权已经给了我的用户。
现在我的问题和疑问是
当我通过数据库链接调用一个过程时,是否需要做一些不同的事情(代码如下)
我应该问sql开发人员哪些问题。顺便说一下,数据库链接是对的。
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();
}
提前谢谢
灰烬
2条答案
按热度按时间x7yiwoj41#
尝试使用拥有该过程的oracle用户名作为前缀:
neekobn82#
答案是“同义词”。
sql developer创建了hr\u click\u get\u emp\u details as的同义词hr_click_get_emp_details@ibsluat1.world
这是他告诉我的,我不能完全把我的头围绕,但能够击中程序。
但是现在,可以获取结果集的元数据,但无法遍历行。获取错误为
我想,这个错误需要新的论坛。
我也不认为这是解决了,因为我不知道如何解决工程。