Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQLException捕获到无效的列索引_Oracle_Stored Procedures_Cursor_Jdbc Odbc_Callable Statement - Fatal编程技术网

Oracle SQLException捕获到无效的列索引

Oracle SQLException捕获到无效的列索引,oracle,stored-procedures,cursor,jdbc-odbc,callable-statement,Oracle,Stored Procedures,Cursor,Jdbc Odbc,Callable Statement,有人能帮我解决这个错误吗:我尝试了不同的方法来解决这个错误,但没有成功 这里是一个包和过程以及一个java文件,我从中调用该过程。 我第一次尝试调用程序。我以前从未使用过程序 所以如果有人能告诉我出了什么问题,我将不胜感激 package.sql create or replace package proj2 as procedure show_students; procedure show_courses; end;

有人能帮我解决这个错误吗:我尝试了不同的方法来解决这个错误,但没有成功

这里是一个包和过程以及一个java文件,我从中调用该过程。 我第一次尝试调用程序。我以前从未使用过程序 所以如果有人能告诉我出了什么问题,我将不胜感激

  package.sql  

     create or replace package proj2 as  
     procedure show_students;  
     procedure show_courses;  
     end;  
     /  


     procedures.sql  

     set serveroutput on;  
     create or replace package body proj2 as  
         procedure show_courses is  
             cursor co1 is   
             select * from courses;  
             co1_rec co1%rowtype;  
         begin  
             if(not co1%isopen)then  
                 open co1;  
             end if;  
             fetch co1 into co1_rec;  
             while co1%found loop  
                 dbms_output.put_line(co1_rec.dept_code||','||co1_rec.course#||','||co1_rec.title);

                 fetch co1 into co1_rec;  
             end loop;  
             close co1;  
         end show_courses;     
     end;
mydemo2.java

import java.sql.*;  
import oracle.jdbc.*;  
import java.math.*;  
import java.io.*;  
import java.awt.*;  
import oracle.jdbc.pool.OracleDataSource;  

public class mydemo2 {  

   public static void main (String args []) throws SQLException {  
    try  
    {  

        //Connection to Oracle server  
        OracleDataSource ds = new oracle.jdbc.pool.OracleDataSource();  
        ds.setURL("jdbc:oracle:thin:@grouchoIII.cc.binghamton.edu:1521:ACAD111");  
        Connection conn = ds.getConnection("uname", "password");  
        OracleResultSet rs = null;  

//      CallableStatement cs = conn.prepareCall("{call proj2.show_students}");  
        OracleCallableStatement cs = (OracleCallableStatement)conn.prepareCall("{call proj2.show_courses}");  
        cs.registerOutParameter(1, OracleTypes.CURSOR);  
        cs.executeQuery();                
        rs = (OracleResultSet)cs.getObject(1);  
//      System.out.println("hi");  
        while(rs.next())  
        {  
        //      String dept_code = rs.getString("dept_code");  
        //      int course_no = rs.getInt("course#");  
        //      String title = rs.getString("title");  
        //      System.out.format(dept_code+","+course_no+","+title);  
        //      System.out.println("success");  
                System.out.println(rs.getString(1)); }  

        //close the result set, statement, and the connection  
        rs.close();  
        cs.close();  
        conn.close();  
   }  
   catch (SQLException ex) { System.out.println ("\n*** SQLException caught ***\n" + ex.getMessage());}  
   catch (Exception e) {System.out.println ("\n*** other Exception caught ***\n");}  
  }  
}  

javac mydemo2.java  
java mydemo2  

*** SQLException caught ***  
Invalid column index  

您正在调用一个不返回任何游标的存储过程,但java代码假定该过程调用正在打开一个游标进行迭代。还要注意,DBMS_输出在服务器上缓冲,通常不会通过JDBC调用看到。下面是一个示例,说明您正在尝试执行的操作

在发布本文之前,我已经看到了这个示例。您是说我必须在过程中添加游标作为out参数吗?是的,这就是我要说的。你能给我一个例子吗?我应该在我的过程中做些什么更改,这样我就可以通过迭代游标从过程中调用它了?我包含的链接中有一个完整的例子。