Исключение одиночной кавычки в 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;
Выход в порядке, если он не содержит одиночных 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
.
Лучшее решение?
Ответы
Ответ 1
Я делаю этот материал вроде честного (обычно генерируя инструкции вставки/обновления).
Вам просто нужно использовать функцию replace, чтобы превратить все '
в ''
. т.е. изменить его на:
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name
||' IS '''||REPLACE( rec.description,'''','''''')||'''; ' ;
Ответ 2
Вы можете использовать оператор Quote, например
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||' IS q''[' ||rec.description|| ']'';' ;
см. http://psoug.org/reference/string_func.html
Ответ 3
Используйте функцию REPLACE
в своем выборе.
declare
str_comment varchar2(4000);
begin
for rec in (SELECT table_name, column_name, REPLACE(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;
Ответ 4
Вам нужно использовать '' в коде
Но перед тем, как попробовать его в реальном коде,
попробуйте строку с кавычками в двойном
Например:
select '''sumesh''' from dual