【问题标题】:How to update the below statement, i am getting error while update如何更新以下语句,更新时出现错误
【发布时间】:2023-01-10 16:00:36
【问题描述】:
我正在尝试如下更新 RRP_VALIDATION 值,但由于 sql 命令未正确结束而出现错误,如何以正确的格式运行以下语句。
UPDATE HES_REPORT_REF_PARAMS
SET RRP_VALIDATION = 'select to_char(RECONCILED_ID), decode(STATUS, 'R', 'RECONCILED', 'UNRECONCILED')||' - bank '||BANK_CODE||' - date '||to_char(RECONCILED_DATE, 'DD-MON-YYYY') from HES_BANK_RECONCILED_GROUPS where CONTROL_CONTEXT_ID = TO_NUMBER(:PARAMETER.BPX_CCI) order by RECONCILED_ID desc'
WHERE HES_REPORT_REF_PARAMS.RRP_MODULE_NUM = '100';
【问题讨论】:
标签:
sql
plsql
oracle-apex
plsqldeveloper
plsql-package
【解决方案1】:
您能否尝试用这样的双单引号替换单引号:
UPDATE HES_REPORT_REF_PARAMS
SET RRP_VALIDATION = 'select to_char(RECONCILED_ID), decode(STATUS, ''R'', ''RECONCILED'', ''UNRECONCILED'')||'' - bank ''||BANK_CODE||'' - date ''||to_char(RECONCILED_DATE, ''DD-MON-YYYY'') from HES_BANK_RECONCILED_GROUPS where CONTROL_CONTEXT_ID = TO_NUMBER(:PARAMETER.BPX_CCI) order by RECONCILED_ID desc'
WHERE HES_REPORT_REF_PARAMS.RRP_MODULE_NUM = '100';
【解决方案2】:
一个简单的选择是使用 q-quoting 机制,这样您就不必担心必须用两个单引号括起来的字符串文字(这可能会变得非常难看)。
UPDATE HES_REPORT_REF_PARAMS
SET RRP_VALIDATION =
q'[select to_char(RECONCILED_ID), decode(STATUS, 'R', 'RECONCILED', 'UNRECONCILED')||' - bank '||BANK_CODE||' - date '||to_char(RECONCILED_DATE, 'DD-MON-YYYY') from HES_BANK_RECONCILED_GROUPS where CONTROL_CONTEXT_ID = TO_NUMBER(:PARAMETER.BPX_CCI) order by RECONCILED_ID desc]'
WHERE HES_REPORT_REF_PARAMS.RRP_MODULE_NUM = '100';
简化:
这就是你所拥有的:
SQL> select 'select 'a' from dual' from dual;
select 'select 'a' from dual' from dual
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
两个单引号:
SQL> select 'select ''a'' from dual' from dual;
'SELECT''A''FROMDUAL
--------------------
select 'a' from dual
q-引用机制:
SQL> select q'[select 'a' from dual]' from dual;
Q'[SELECT'A'FROMDUAL
--------------------
select 'a' from dual
SQL>