ORA-00917 экранирование Апострофа в sql-запросе
Приведенный ниже код прекрасно работает в большинстве случаев. Он взрывается, когда LIB_SEGCO имеет какие-либо одинарные кавычки такие как ABC'DEF
В этих случаях он дает ошибку ORA-00917: отсутствует запятая
req := 'INSERT INTO CLIENTS(
IDEVT,
ID_CLIENT,
CATEGORIE_CLIENT,
SEGCO,
LIB_SEGCO,
NOM,
ADRESSE,
CODE_POSTAL,
VILLE,
PAYS,
STATUT)
values(''' || UNID ||''','''||ID||''','''||SEGCO||''','''||L_SEGCO ||''','''||**LIB_SEGCO** ||''','''|| NOM||''','''||
ADRESSE||''','''||CODE_POSTAL||''','''||cVILLE||''','''||PAYS||''','''||CODE_STATUT||''')';
execute immediate req;
Есть идеи избежать Апострофа, когда он передается в переменной?
Спасибо
1 ответ:
Использование:
req := q'{INSERT INTO CLIENTS( IDEVT, ID_CLIENT, CATEGORIE_CLIENT, SEGCO, LIB_SEGCO, NOM,RCS_ADRESSE, CODE_POSTAL, VILLE, PAYS, STATUT) values( :1, :2, :3, :4, :5, :6 :7, :8, :9, :10)}'; execute immediate req USING UNID , ID , SEGCO , L_SEGCO , LIB_SEGCO , NOM , ADRESSE , CODE_POSTAL , cVILLE , PAYS ;
Примечание: I ommited
, CODE_STATUT
, потому что в команде INSERT указано только 10 столбцов, ноCODE_STATUT
является 11-м, поэтому количество столбцов не совпадает с количеством значений.