PL / SQL, как избежать одинарной кавычки в строке?
в 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;
/
4 ответа:
Вы можете использовать буквальное цитирование:
stmt := q'[insert into MY_TBL (Col) values('ER0002')]';
документация для литералов можно посмотреть здесь.
кроме того, вы можете использовать две кавычки для обозначения одной кавычки:
stmt := 'insert into MY_TBL (Col) values(''ER0002'')';
механизм буквенного цитирования с синтаксисом Q является более гибким и читаемым, IMO.
здесь блоге это должно помочь избежать галочки в строках.
вот самый простой метод из указанного поста:
самый простой и наиболее часто используемый способ заключается в использовании одной кавычки с двумя одиночными >кавычки в обе стороны.
выберите 'проверить одинарная кавычка"' от двойной;
вывод вышеприведенного утверждения будет:
тест одиночная кавычка'
просто указание требуется дополнительный символ одинарной кавычки для печати одинарной кавычки >символ. То есть если поставить две одинарные кавычки, то Oracle напечатает одну. Первый >один действует как escape-символ.
Это самый простой способ печати одинарных кавычек в Oracle. Но это будет > сложно, когда вам нужно напечатать набор кавычек вместо одного. В этой ситуации следующий метод работает нормально. Но это требует еще некоторого набора текста труд.
в дополнение к ответу DCookie выше, вы также можете использовать chr(39) для одной кавычки.
Я нахожу это особенно полезным, когда мне нужно создать несколько инструкций insert/update на основе большого количества существующих данных.
вот очень простой пример:
Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;