ORA-01001 invalid cursorCause: Either a host language program call specified an invalid cursor or the value of the MAXOPENCURSORS option in the precompiler command were too small. All cursors must be opened using the OOPEN call before being referenced in any of the following calls: SQL, DESCRIBE, NAME, DEFINE, BIND, EXEC, FETCH, and CLOSE. The Logon Data Area (LDA) must be defined by using OLON or OLOGON. If the LDA is not defined, this message is issued for the following calls: OPEN, COM, CON, ROL, and LOGOFF.Action: Check the erroneous call statement. Specify a correct LDA area or open the cursor as required. If there is no problem with the cursor, it may be necessary to increase the MAXOPENCURSORS option value before precompiling.
过程的代码CREATE OR REPLACE PROCEDURE EDU.PROC_SMS_DISPATCHER( MSGID IN VARCHAR2, ATTIME IN VARCHAR2, T_SRCTERMID IN VARCHAR2, AIN_SERVICEID IN VARCHAR2, FEE_TYPE IN NUMBER, SRCTERMPHONE IN VARCHAR2, DESCTERMID_LIST IN VARCHAR2, DESCTERMID_TYPE IN VARCHAR2, UNIT_LIST IN VARCHAR2, ORGID IN NUMBER, MSGLEVEL IN NUMBER, RET OUT NUMBER, ERRORMSG OUT VARCHAR2) AS BEGIN DECLARE V_ERR_CODE NUMBER; V_ERR_TXT VARCHAR2(600); DESCTERMID_LIST_VAR VARCHAR(4000); DESCTERMID_TYPE_LIST_VAR VARCHAR(2000); BEGIN RET:=0; DESCTERMID_LIST_VAR := SUBSTR(DESCTERMID_LIST,1,4000);
MSGID IN VARCHAR2,
ATTIME IN VARCHAR2,
T_SRCTERMID IN VARCHAR2,
AIN_SERVICEID IN VARCHAR2,
FEE_TYPE IN NUMBER,
SRCTERMPHONE IN VARCHAR2,
DESCTERMID_LIST IN VARCHAR2,
DESCTERMID_TYPE IN VARCHAR2,
UNIT_LIST IN VARCHAR2,
ORGID IN NUMBER,
MSGLEVEL IN NUMBER,
RET OUT NUMBER,
ERRORMSG OUT VARCHAR2)
AS
BEGIN
DECLARE
V_ERR_CODE NUMBER;
V_ERR_TXT VARCHAR2(600); DESCTERMID_LIST_VAR VARCHAR(4000);
DESCTERMID_TYPE_LIST_VAR VARCHAR(2000); BEGIN
RET:=0;
DESCTERMID_LIST_VAR := SUBSTR(DESCTERMID_LIST,1,4000);
INSERT INTO SMS_DISPATCHER
(MSGID, ATTIME,T_SRCTERMID,AIN_SERVICEID,FEE_TYPE,SRCTERMPHONE,
DESCTERMID_LIST,DESCTERMID_TYPE,UNIT_LIST,
CREATEDATE,SRC_ORGID,MSG_LEVEL)
VALUES(MSGID,ATTIME,T_SRCTERMID,AIN_SERVICEID,FEE_TYPE,SRCTERMPHONE,
DESCTERMID_LIST_VAR,DESCTERMID_TYPE,UNIT_LIST,
SYSDATE,ORGID,MSGLEVEL);
COMMIT;
RET:=1;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK; V_ERR_CODE := SQLCODE;
V_ERR_TXT := 'PROC_SMS_DISPATCHER:'||SUBSTR(SQLERRM,1,200)||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(); INSERT INTO PROC_ERR_LOGS(CODE,MESSAGE,INFO)
VALUES(V_ERR_CODE,V_ERR_TXT,'EXCEPTION');
COMMIT;
END;
END;页面的代码:
//接口调用(存储过程)
String procedure = "{call PROC_SMS_DISPATCHER(?,?,?,?,?,?,?,?,?,?,?,?,?) }";
CallableStatement cstmt = con.prepareCall(procedure);
cstmt.setString(1,message_id);
cstmt.setString(2,"sysdate");
cstmt.setString(3,srcTermID+"66");
cstmt.setString(4,"DX");}
//单位状态
sql = " select fee_status from table_01 where id = "+ id;
rs = stmt.executeQuery(sql);
rs.next();
cstmt.setString(5,rs.getString(1)); sql = " select mobile from table_02 where id=" + p_id;
rs = stmt.executeQuery(sql);
rs.next();
cstmt.setString(6,rs.getString(1)); cstmt.setString(7,desile_con);
cstmt.setString(8,"2");
cstmt.setString(9,det_con); cstmt.setString(10,g_id);
cstmt.setString(11,glevel);
cstmt.registerOutParameter(12,java.sql.Types.INTEGER);
cstmt.registerOutParameter(13,java.sql.Types.VARCHAR);
int lala=10;
cstmt.executeUpdate();
lala=cstmt.getInt(12);
if(lala==0){
----过程调用失败
}
个人感觉,是存储过程的问题,因为报错是 ora-01001.