CREATE OR REPLACE PROCEDURE DONGTAITABLENAME(tablename in varchar2, cur out sys_refcursor) AS
 v_sql varchar2(200);
BEGIN
  v_sql:='select sal from'||tablename;
  open cur for v_sql;
END DONGTAITABLENAME;
在JAVA 中调用提示
java.sql.SQLException: Invalid column index
 at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:124)
 at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:300)
 at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:389)
 at oracle.jdbc.driver.OracleCallableStatementWrapper.registerOutParameter(OracleCallableStatementWrapper.java:1568)
 at ArrayCopyDemo.main(ArrayCopyDemo.java:26)
  这个是怎么回事呢

解决方案 »

  1.   

    你的问题应该出在第二个参数的注册上。
    要显式的使用OracleCallableStatement
    stmt = c.prepareCall("{ call DONGTAITABLENAME(?,?)}");
    stmt.setString(1, "whatever");
    stmt.registerOutParameter(2, OracleTypes.CURSOR);
    stmt.execute();
    then resultSet = (ResultSet)stmt.getObject(2);
      

  2.   

    这样试试呢CREATE OR REPLACE PROCEDURE DONGTAITABLENAME(tablename in varchar2, cur out sys_refcursor) AS
     v_sql varchar2(200);
    BEGIN
      v_sql:='select sal from'||tablename;
      open cur for replace(v_sql,'''');
    END DONGTAITABLENAME;
      

  3.   


    SQLException: Invalid column index
    仔细看你调用的表与检索 的列名的所属关系 v_sql:='select sal from  '||tablename;