Можно ли передать имя переменной столбца в оператор обновления ORACLE без динамического SQL - PullRequest
0 голосов
/ 26 февраля 2019
UPDATE P_ATTR 
    SET XC=ATTR_VAL, 
        SYS_MODIFIED_BY =UPPER(TRIM(USER_ID)), 
        SYS_MODIFIED_DATE =SYSDATE 
WHERE ID_1 IN (SELECT ID_1 
               FROM EMP_MSTR 
               WHERE UPPER(x_SQL)= UPPER(LOC) 
                AND UPPER(LOC_CD)=UPPER('IND'));

Получение сообщения об ошибке:

PL / SQL: ORA-00904: «XC»: неверный идентификатор

1 Ответ

0 голосов
/ 26 февраля 2019

Нет, это невозможно без динамического SQL.Однако вы можете написать статический оператор обновления для интерпретации значения переменной и обновления правильного столбца.Например:

(Предполагая, что «XC» является переменной PL / SQL. Если вы не используете PL / SQL, вам потребуется переменная связывания, поэтому заменяйте каждое вхождение «XC» на «: XC»То же самое с "ATTR_VAL".)

UPDATE P_ATTR 
  SET 
  COLUMN_1 = DECODE(XC,'COLUMN_1',ATTR_VAL,COLUMN_1), 
  COLUMN_2 = DECODE(XC,'COLUMN_2',ATTR_VAL,COLUMN_2), 
  COLUMN_3 = DECODE(XC,'COLUMN_3',ATTR_VAL,COLUMN_3), 
  COLUMN_4 = DECODE(XC,'COLUMN_4',ATTR_VAL,COLUMN_4), 
  ...
  SYS_MODIFIED_BY =UPPER(TRIM(USER_ID)), 
  SYS_MODIFIED_DATE =SYSDATE 
WHERE ID_1 IN( SELECT ID_1 
               FROM   EMP_MSTR 
               WHERE  UPPER(x_SQL)= UPPER(LOC) 
               AND    UPPER(LOC_CD)=UPPER('IND'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...