В Oracle PL/SQL, как избежать одиночной кавычки в строке? Я пробовал этот путь, он не работает.
declare
stmt varchar2(2000);
begin
for i in 1021 .. 6020
loop
stmt := 'insert into MY_TBL (Col) values(\'ER0002\')';
dbms_output.put_line(stmt);
execute immediate stmt;
commit;
end loop;
exception
when others then
rollback;
dbms_output.put_line(sqlerrm);
end;
/
Вы можете использовать буквенное цитирование:
stmt := q'[insert into MY_TBL (Col) values('ER0002')]';
Документация для литералов можно найти здесь.
В качестве альтернативы вы можете использовать два кавычки для обозначения одной кавычки:
stmt := 'insert into MY_TBL (Col) values(''ER0002'')';
Литеральный механизм цитирования с синтаксисом Q более гибкий и читаемый, IMO.
Здесь сообщение в блоге, которое должно помочь с экранированием тиков в строках.
Вот простейший метод из поста:
Самый простой и наиболее распространенный способ - использовать один кавычек с двумя одиночными кавычками в обеих сторонах.
SELECT 'тестовая одиночная кавычка' '' из двойника;
Вывод вышеуказанного оператора:
test single quote '
Просто заявив, что вам нужен дополнительный символ одиночной кавычки для печати одного символа quote > . То есть, если вы поместите два символа одной кавычки, Oracle будет печатать один. Первый > действует как escape-символ.
Это самый простой способ печати одиночных кавычек в Oracle. Но это будет сложно, если вам придется печатать набор кавычек вместо одного. В этой ситуации следующий метод работает отлично. Но для этого требуется еще более типичный труд.
Просто поставьте следующую инструкцию перед FOR:
set escape '\';