【问题标题】:Invalid column index in anonymous plsql block [duplicate]匿名plsql块中的列索引无效[重复]
【发布时间】: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);

你能帮忙吗?

【问题讨论】:

标签: java oracle plsql


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2020-02-11
      • 2012-03-15
      相关资源
      最近更新 更多