匿名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块中的列索引无效[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security - 无效的列索引异常[重复]

PreparedStatement 中的列索引无效

C#中的匿名块[重复]

Oracle 匿名块中的多个结果集

匿名 pl/sql 块中的声明顺序

java.sql.SQLException: 无效的列索引