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 78

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;

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

set escape '\';