在PLSQL中转义单引号

ref*_*rer 27 oracle plsql

我希望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