Вставка строки со специальными символами в столбец

Как я могу успешно выполнить такой запрос в SqlDeveloper?

execute immediate q'#
                    insert into results(SrcProcedure) 
                                values('d/&'s*73;.f45')
                    #';

person Desaretiuss    schedule 28.04.2015    source источник
comment
возможный дубликат экранирования одиночной кавычки в PLSQL   -  person Politank-Z    schedule 28.04.2015
comment
Возможный дубликат Какие специальные символы разрешены в SQL Server varchar поля?   -  person Ashraf Sada    schedule 16.06.2016


Ответы (2)


Вам нужно выучить правила экранирования для вашего языка. В SQL ' является специальным символом. Выход для него '':

execute immediate q'#
                insert into results(SrcProcedure) 
                            values(''d/&''''s*73;.f45'')
                #';

Правило: Для каждого уровня вложенности необходимо дублировать все одинарные кавычки.

d/&'s*73;.f45
'd/&''s*73;.f45'
...values(''d/&''''s*73;.f45'')...

Вы можете обойтись меньшим количеством кавычек, если используете q'{...}':

execute immediate q'{
                insert into results(SrcProcedure) 
                            values('d/&''s*73;.f45')
                }';

Связанный:

person Aaron Digulla    schedule 28.04.2015
comment
Альтернативный синтаксис кавычек работает практически с любым символом в качестве разделителя кавычек. q'# ... #'; работает нормально. Проблема в том, что строка внутри строки, внутри строки должна быть экранирована. - person Jon Heller; 29.02.2016

Проблема в том, что вы пытаетесь вставить значение d/&'s*73;.f45, а символ ' интерпретируется как конец значения.

Вам нужно экранировать символ ':

execute immediate q'#
                insert into results(SrcProcedure) 
                            values('d/&''s*73;.f45')
                #';

Или вы можете вложить альтернативный механизм цитирования, чтобы избежать экранирования строк:

execute immediate q'#
                insert into results(SrcProcedure) 
                            values(q'!d/&'s*73;.f45!')
                #';
person antonio    schedule 28.04.2015