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)
这个是怎么回事呢
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)
这个是怎么回事呢
要显式的使用OracleCallableStatement
stmt = c.prepareCall("{ call DONGTAITABLENAME(?,?)}");
stmt.setString(1, "whatever");
stmt.registerOutParameter(2, OracleTypes.CURSOR);
stmt.execute();
then resultSet = (ResultSet)stmt.getObject(2);
v_sql varchar2(200);
BEGIN
v_sql:='select sal from'||tablename;
open cur for replace(v_sql,'''');
END DONGTAITABLENAME;
SQLException: Invalid column index
仔细看你调用的表与检索 的列名的所属关系 v_sql:='select sal from '||tablename;