Конкатенация PL / SQL - PullRequest
       33

Конкатенация PL / SQL

0 голосов
/ 25 июня 2018

у меня есть процедура, в которой во входе два параметра CREATE_PARTITION (yearSource IN VARCHAR2, yearDestination IN VARCHAR2)

когда я хочу вставить yearSource, соединенный с другой строкой, в таблицу ничего не вставляется

я объявляю переменную yearAA, которая принимает yearSource, и объединяю ее с 'AA'

yearAA varchar2 (30): = yearSource || 'AA';

чтобы вставить его, я использую:

выполнить немедленное 'INSERT INTO MOUADTEST2018 VALUES (' || yearAA || ')';

результат: ничего не вставлено ипоказывает это сообщение ORA-00984: столбец здесь не разрешен

1 Ответ

0 голосов
/ 25 июня 2018

Вы должны указать значение.Таким образом, если yearAA равно 2018AA, ваш код интерпретируется как:

execute immediate 'INSERT INTO MOUADTEST2018 VALUES(2018AA)';

, который пытается выполнить

INSERT INTO MOUADTEST2018 VALUES(2018AA)

, который выдает ошибку, поскольку 2018AA isnв кавычках, поэтому Oracle считает, что это должен быть идентификатор (например, имя столбца).

Вы можете изменить свой код на

execute immediate 'INSERT INTO MOUADTEST2018 VALUES('''||yearAA||''')';

Но это не лучшая практика,так как это позволяет SQL-инъекцию.Вместо этого используйте переменные связывания.

execute immediate 'INSERT INTO MOUADTEST2018 VALUES(:1)' using yearAA;

Кроме того, я не думаю, что вам нужно execute immediate, поэтому вы можете просто сделать:

insert into MOUADTEST2018 values(yearAA);
...