在PLSQL中转义单引号

时间:2011-07-13 11:58:25

标签: oracle 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;

如果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)列的单引号。

有更好的解决方案吗?

4 个答案:

答案 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|| ']'';' ;

请参阅http://psoug.org/reference/string_func.html

答案 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