我希望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中的单个qoutes时,输出是OK的。否则需要转义字母。我应该如何实现它?
OK输出行(它有转义字母以保留单个查询):
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It''s secret';不是NOK输出行,因为没有添加单引号的转义字母并且无法编译:
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It's secret';我的解决方案不是检查description是否包含单引号。我只是在生成COMMENT ON字符串之前将源(描述)列的单引号替换为两个单引号,然后执行ROLLBACK。
有更好的解决方案吗?
发布于 2011-07-13 20:04:54
我经常做这种排序工作(通常生成insert/update语句)。
您只需使用replace函数将所有'转换为''即可。例如,将其更改为:
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name
||' IS '''||REPLACE( rec.description,'''','''''')||'''; ' ;发布于 2011-07-13 20:32:55
您可以像这样使用Quote运算符
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||' IS q''[' ||rec.description|| ']'';' ;请参阅http://psoug.org/reference/string_func.html
发布于 2011-07-13 20:05:31
在select中使用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;https://stackoverflow.com/questions/6678478
复制相似问题