2014-10-06 89 views
0

我正在一個Invalid column index當我嘗試設置此查詢的參數in_cnt_date列索引無效PLSQL塊

public static final String CONTEXT = "DECLARE in_cnt_date DATE := TO_DATE('&'); " + 
" hv_cnt_id NUMBER := 0; " + 
" BEGIN DBMS_OUTPUT.ENABLE (NULL); " + 
" INSERT INTO dt_contexts (CNT_ID, CNT_CONTEXT, CNT_TYPE, CNT_SOURCE, CNT_COMMENT, CNT_DATE, CNT_DATE_INSERT, CNT_DATE_UPDATE) VALUES (0, 'EPE_CONTEXT', 'ROUTE', 'bdd', 'Built from ROUTE', in_cnt_date, SYSDATE, SYSDATE); " + 
" SELECT SEQ_DT_CNT_ID.CURRVAL INTO hv_cnt_id FROM DUAL; " + 
" dbms_output.put_line(hv_cnt_id); " + 
" EXCEPTION WHEN OTHERS THEN RAISE ; END;"; 

參數的設置:

CallableStatement cs = null; 
    ResultSet rs = null; 
    int contextId = 0; 
    try { 
     conn.setAutoCommit(false); 
     cs = conn.prepareCall(CONTEXT); 
     cs.setDate(1, (java.sql.Date) Route.datePrf); 

你能幫忙?

+0

這與您的[上一個問題]看起來相同(http://stackoverflow.com/questions/26182869/retrieve-anonymous-plsql-block-result) – 2014-10-06 09:34:18

回答

3

您當前的語句沒有任何綁定變量,所以當你嘗試綁定索引1,你得到這個錯誤。綁定變量佔位符是一個問號,而不是一個符號,不應該被引用:

"DECLARE in_cnt_date DATE := TO_DATE(?); " + 

但您使用的是Date,所以你不需要TO_DATE()通話設置它:

"DECLARE in_cnt_date DATE := ?; " + 
0

你必須輸入字符數據類型來to_date函數

請參考鏈接here

The TO_DATE function converts char of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype to a value of DATE datatype