2014-10-06 3 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) –

ответ

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