Экранирование одинарной кавычки в PLSQL

Я хочу, чтобы PLSQL генерировал такие строки, как:

COMMENT ON COLUMN TABLE.COLUMN IS 'comment from database';

Мое решение:

declare
  str_comment varchar2(4000);
begin
  for rec in (select table_name, column_name, description from description_table)
  loop
    str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||'  IS '''||rec.description||'''; ' ;
    dbms_output.put_line(str_comment);
  end loop;
end;

Вывод в порядке, если он не содержит одиночных кавычек в rec.description . В противном случае потребуется escape-буква. Как мне ее реализовать?

Выходная строка OK (в ней есть escape-буква для сохранения одиночной кавычки):

COMMENT ON COLUMN TABLE1.COLUMN1_LV  IS 'It''s secret';

НЕ NOK выходная строка, потому что не добавлена ​​escape-буква для одинарной кавычки и не компилируется:

COMMENT ON COLUMN TABLE1.COLUMN1_LV  IS 'It's secret';

Мое решение - не проверять, содержит ли описание одинарные кавычки. Я просто заменяю одинарные кавычки столбца источника (описания) двумя одинарными кавычками перед генерацией КОММЕНТАРИЙ НА строк, а затем I ROLLBACK .

Есть лучшее решение?

27
задан mik 3 June 2016 в 13:45
поделиться