匿名plsql块中的列索引无效[重复]
Posted
技术标签:
【中文标题】匿名plsql块中的列索引无效[重复]【英文标题】:Invalid column index in anonymous plsql block [duplicate] 【发布时间】:2014-10-06 09:10:54 【问题描述】:当我尝试设置此查询的参数in_cnt_date
时,我得到一个Invalid column index
:
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);
你能帮忙吗?
【问题讨论】:
这看起来和你的previous question一样 【参考方案1】:您当前的语句没有任何绑定变量,因此当您尝试绑定索引 1 时,您会收到此错误。绑定变量占位符是问号,不是和号,不应该被引用:
"DECLARE in_cnt_date DATE := TO_DATE(?); " +
但是您使用Date
设置它,因此您不需要TO_DATE()
调用:
"DECLARE in_cnt_date DATE := ?; " +
【讨论】:
【参考方案2】:您必须在 TO_DATE 函数中输入字符数据类型
请参考链接here
The TO_DATE function converts char of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype to a value of DATE datatype
【讨论】:
以上是关于匿名plsql块中的列索引无效[重复]的主要内容,如果未能解决你的问题,请参考以下文章