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

89

В 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;
/
возможный дубликатEscaping single quote in PLSQL Doc Brown

Ваш Ответ

3   ответа
14

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

Вот самый простой способ из указанного поста:

The most simple and most used way is to use a single quotation mark with two single >quotation marks in both sides.

SELECT 'test single quote''' from dual;

The output of the above statement would be:

test single quote'

Simply stating you require an additional single quote character to print a single quote >character. That is if you put two single quote characters Oracle will print one. The first >one acts like an escape character.

This is the simplest way to print single quotation marks in Oracle. But it will get >complex when you have to print a set of quotation marks instead of just one. In this >situation the following method works fine. But it requires some more typing labour.

9

вы также можете использовать chr (39) для одиночной кавычки.

Я считаю это особенно полезным, когда мне нужно создать несколько операторов вставки / обновления, основанных на большом количестве существующих данных.

Вот очень простой пример:

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;
157

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

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

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

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

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

Похожие вопросы