Oracle SP: PLS-00103: Обнаружен символ "", когда ожидается одно из следующего: - PullRequest
1 голос
/ 16 июня 2020
EXECUTE IMMEDIATE 'UPDATE GDW_ARC_CDM.LND_DIM_GEO
SET DESCRIPTION_COLUMN = REPLACE( DESCRIPTION_COLUMN, '`', '''' )
WHERE CNTRY_ID         = 'KR'
AND SRC_ID             = 'KR_RET'
AND DESCRIPTION_COLUMN LIKE '%`%'';
     COMMIT;

Я пытаюсь добавить вышеуказанный оператор в Oracle SP, я получаю ошибку ниже, тот же запрос работает в SQL Developer как обычный оператор (не в SP).

Не могли бы вы предложить?

Ответы [ 2 ]

4 голосов
/ 16 июня 2020

Проблема в том, что вы должны заключить этот UPDATE в одинарные кавычки (что вы и сделали), но позаботьтесь о других одинарных кавычках в этом коде. Все они должны быть «удвоены» или - что проще и удобнее для чтения и обслуживания - использовать механизм q-кавычек.

Примерно так:

SQL> select * From lnd_dim_geo;

DES CN SRC_ID
--- -- ------
x`y KR KR_RET

SQL> begin
  2    execute immediate q'[update lnd_dim_geo set description_column = replace(description_column, '`', '')
  3                         where cntry_id = 'KR' and src_id = 'KR_RET' and description_column like '%%']';
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> select * From lnd_dim_geo;

DES CN SRC_ID
--- -- ------
xy  KR KR_RET

SQL>
0 голосов
/ 16 июня 2020

Если это ваш исходный запрос, то почему вы вообще используете динамический c запрос.

Вы можете напрямую использовать следующее:

UPDATE LND_DIM_GEO
   SET
    DESCRIPTION_COLUMN = REPLACE(DESCRIPTION_COLUMN, '`', '')
 WHERE CNTRY_ID = 'KR'
   AND SRC_ID = 'KR_RET'
   AND DESCRIPTION_COLUMN LIKE '%%'
...