我希望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,则输出正常。否则需要转义信。我该如何实施呢?
确定输出行(它有转义字以保留单个qoute):
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It''s secret';
NOT NOK输出行,因为没有添加单引号的转义字母且不编译:
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It's secret';
我的解决方案是不检查描述是否包含单引号。我只是在生成COMMENT ON
字符串然后我ROLLBACK
之前用两个单引号替换source(description)列的单引号。
有更好的解决方案吗?
答案 0 :(得分:35)
我做了相当多的事情(通常生成插入/更新语句)。
您只需使用替换功能将所有'
变为''
。即将其更改为:
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name
||' IS '''||REPLACE( rec.description,'''','''''')||'''; ' ;
答案 1 :(得分:17)
您可以使用引用操作符,如
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||' IS q''[' ||rec.description|| ']'';' ;
答案 2 :(得分:2)
使用选择中的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;
答案 3 :(得分:-2)
您需要在代码中使用'' 但在尝试实际代码之前,
尝试在双重
中引用的行例如:
select '''sumesh''' from dual