如何在单行中处理动态变量字符串值

时间:2016-08-11 12:34:01

标签: oracle plsql

这是我的PL / SQL块。当我执行它时,'V_QUERY'变量的结果分成两行,如:

'%[CDATA[/documents/%/4min.png
/%'.

如何在以下一行中获取它:enter image description here

'%[CDATA[/documents/%/4min.png/%'

declare
   cursor c1 is
      select rtrim(ltrim(substr(typesettings, 7), '"'), '"') as typesettings
        from trashentry
       where rownum < 2;
   v_query varchar2(32767);
begin
   for r1 in c1
   loop
      v_query := '''%[CDATA[/documents/%/' || r1.typesettings || '/%''';
      dbms_output.put_line(v_query);
   end loop;

end;

1 个答案:

答案 0 :(得分:0)

您很可能需要从chr(10)的末尾修剪typesettings。修剪chr(13)也可能不会受到影响,因为它也可能存在。

假设您的输入字符串中没有任何双引号需要保留,您可以同时实现多项内容:而不是rtrim(ltrim(...))(无论如何应该是trim(...),它做同样的事情并且更简单,只调用一个函数而不是两个函数,你可以使用translate

select translate(substr(typesettings, 7), 'x"' || chr(10) || chr(13), 'x') as typesettings
.......

注意最后两个参数中的x;它实际上没有做任何事情,它只是围绕translate函数的限制(这反过来是由于Oracle将空字符串视为NULL)。在此示例中,translate将使用x替换输入字符串中的每个x,并且每次出现"chr(10)chr(13)都会简单地删除。