PL / SQL, как избежать одинарной кавычки в строке?

59

В 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;
/
Теги:
plsql

3 ответа

105
Лучший ответ

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

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';

Документация для литералов можно найти здесь.

В качестве альтернативы вы можете использовать два кавычки для обозначения одной кавычки:

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

Литеральный механизм цитирования с синтаксисом Q более гибкий и читаемый, IMO.

9

Здесь сообщение в блоге, которое должно помочь с экранированием тиков в строках.

Вот простейший метод из поста:

Самый простой и наиболее распространенный способ - использовать один кавычек с двумя одиночными кавычками в обеих сторонах.

SELECT 'тестовая одиночная кавычка' '' из двойника;

Вывод вышеуказанного оператора:

test single quote '

Просто заявив, что вам нужен дополнительный символ одиночной кавычки для печати одного символа quote > . То есть, если вы поместите два символа одной кавычки, Oracle будет печатать один. Первый > действует как escape-символ.

Это самый простой способ печати одиночных кавычек в Oracle. Но это будет сложно, если вам придется печатать набор кавычек вместо одного. В этой ситуации следующий метод работает отлично. Но для этого требуется еще более типичный труд.

-4

Просто поставьте следующую инструкцию перед FOR:

set escape '\';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню