sql过程

kfgdxczn  于 2021-07-11  发布在  Java
关注(0)|答案(2)|浏览(430)

这里我的目标是在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();
             }

提前谢谢
灰烬

x7yiwoj4

x7yiwoj41#

尝试使用拥有该过程的oracle用户名作为前缀:

username.HR_CLICK_GET_EMP_DETAILS@IBSLUAT1.WORLD
neekobn8

neekobn82#

答案是“同义词”。
sql developer创建了hr\u click\u get\u emp\u details as的同义词hr_click_get_emp_details@ibsluat1.world
这是他告诉我的,我不能完全把我的头围绕,但能够击中程序。
但是现在,可以获取结果集的元数据,但无法遍历行。获取错误为

java.sql.SQLException: ORA-24338: statement handle not executed

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
    at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:1018)
    at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:291)
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:213)
    at ashishtest.StoreProcedureCursor.main(StoreProcedureCursor.java:80)

我想,这个错误需要新的论坛。
我也不认为这是解决了,因为我不知道如何解决工程。

相关问题