Я хочу, чтобы 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;
Выход в порядке, если он не содержит одиночных qoutes в rec.description
. В противном случае существует необходимость в escape-письме. Как его реализовать?
Выходная строка OK (для сохранения одного qoute имеет escape-букву):
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It' secret';
Выходная строка NOT NOK, потому что никакая escape-буква для одиночной кавычки не добавляется и не компилируется:
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It secret';
Мое решение не проверять, содержит ли описание одиночные кавычки. Я просто заменяю одиночную кавычку столбца источника (описания) двумя одинарными кавычками перед созданием строк COMMENT ON
, а затем я ROLLBACK
.
Лучшее решение?