【问题标题】:Getting the error: "ORA-20999: Failed to parse SQL query! <p>ORA-06550: line 3, column 25: ORA-00936: missing expression收到错误:“ORA-20999:无法解析 SQL 查询!<p>ORA-06550:第 3 行,第 25 列:ORA-00936:缺少表达式
【发布时间】:2020-07-16 03:37:51
【问题描述】:

我正在使用 Oracle Apex 并根据从 plsql 主体返回的 sql 创建报告。

这就是我的陈述:

DECLARE
    l_query varchar2(1000); 
BEGIN
   l_query := 'SELECT ' || :P10_MYVAR || ' from dual ';
   return l_query;
END;

我收到以下错误消息:

ORA-20999: Parsing returned query results in "ORA-20999: Failed to parse SQL query! <p>ORA-06550: line 3, column 25: ORA-00936: missing expression</p>".

如果我尝试不使用任何绑定变量,它编译得很好:

DECLARE
        l_query varchar2(1000); 
    BEGIN
       l_query := 'SELECT sysdate from dual ';
       return l_query;
    END;

我不明白为什么会发生此错误。如果我直接在数据库中运行命令:

SELECT :P10_MYVAR from dual

这运行良好。为什么会出现此错误?

【问题讨论】:

    标签: sql oracle select plsql oracle-apex


    【解决方案1】:

    大概,你的意思是:

    DECLARE
        l_query varchar2(1000); 
    BEGIN
       l_query := 'SELECT :P10_MYVAR from dual';
       return l_query;
    END;
    

    即:你想把参数名放在查询中而不是与字符串串联。

    【讨论】:

      【解决方案2】:

      使用 Apex 表达式时出现相同错误,以下查询对我有用

       declare
      v_sql varchar2(4000);
      begin
      
        if :P8_TYPE = 'C' then
          return q'~
          select ROWID,
                 ID,
                 C1,
                 TXDATE,
                 TRANSACTIONTYPE, 
                 DEBIT,
                 CREDIT,
                 BALANCE 
            from TRANSMASTER
            where 
            TXDATE BETWEEN TO_DATE (:P8_FROMDT, 'mm/dd/yyyy') AND TO_DATE (:P8_TODT, 'mm/dd/yyyy') AND CREDIT > 0; 
          ~';
        else
          return q'~
          select ROWID,
                 ID,
                 C1,
                 TXDATE,
                 TRANSACTIONTYPE, 
                 DEBIT,
                 CREDIT,
                 BALANCE 
            from TRANSMASTER
            where 
            TXDATE BETWEEN TO_DATE (:P8_FROMDT, 'mm/dd/yyyy') AND TO_DATE (:P8_TODT, 'mm/dd/yyyy')  AND DEBIT > 0; 
          ~';
        end if;
         
      end;
      

      【讨论】:

        猜你喜欢
        • 2021-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        相关资源
        最近更新 更多