我希望PLSQL生成如下字符串:
COMMENT ON COLUMN TABLE.COLUMN IS 'comment from database';
Run Code Online (Sandbox Code Playgroud)
我的解决方案是:
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;
Run Code Online (Sandbox Code Playgroud)
如果输入不包含单个qoutes,则输出正常rec.description.否则需要转义信.我该如何实施呢?
OK输出行(它有转义字以保留单个qoute):
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It''s secret';
Run Code Online (Sandbox Code Playgroud)
NOT NOK输出行,因为没有添加单引号的转义字母且不编译:
COMMENT ON COLUMN TABLE1.COLUMN1_LV IS 'It's secret';
Run Code Online (Sandbox Code Playgroud)
我的解决方案是不检查描述是否包含单引号.我只是在生成COMMENT ON字符串然后我之前用两个单引号替换source(description)列的单引号ROLLBACK.
更好的解决方案?
Sod*_*ved 36
我做了很多这样的事情(通常生成插入/更新语句).
您只需要使用替换功能将所有内容都'转换为''.即将其更改为:
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name
||' IS '''||REPLACE( rec.description,'''','''''')||'''; ' ;
Run Code Online (Sandbox Code Playgroud)
sch*_*rik 18
你可以使用Quote运算符
str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||' IS q''[' ||rec.description|| ']'';' ;
Run Code Online (Sandbox Code Playgroud)
请参阅http://psoug.org/reference/string_func.html