Как в 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;
/
Ответы:
Вы можете использовать буквальные кавычки:
Документацию для литералов можно найти здесь .
В качестве альтернативы вы можете использовать две кавычки для обозначения одинарной кавычки:
Механизм буквальных кавычек с синтаксисом Q более гибкий и читаемый, IMO.
источник
Вот сообщение в блоге, которое должно помочь избежать галочки в строках.
Вот простейший метод из указанного сообщения:
источник
В дополнение к ответу DCookie выше, вы также можете использовать chr (39) для одинарной кавычки.
Я считаю это особенно полезным, когда мне нужно создать ряд операторов вставки / обновления на основе большого количества существующих данных.
Вот очень быстрый пример:
Допустим, у нас есть очень простая таблица Customers, в которой есть 2 столбца: FirstName и LastName. Нам нужно переместить данные в Customers2, поэтому нам нужно сгенерировать несколько операторов INSERT.
Я обнаружил, что это очень полезно при перемещении данных из одной среды в другую или при быстром восстановлении среды.
источник
EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'
; работал у меня. закрытиеvarchar
/string
с двумя парами одинарных кавычек помогло. Другой вариант мог бы использоватьusing
ключевое слово,EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'
;using
Ключевое слово Remember не будет работать, если вы используетеEXECUTE IMMEDIATE
DDL для выполнения с параметрами, однако использование кавычек будет работать для DDL.источник