Oracle PL / SQL中的RTRIM(CLOB字段)

时间:2013-07-31 08:19:18

标签: oracle clob

请假设我在Oracle表中有一个CLOB字段,其中存储了包/过程/函数的创建脚本。

我想删除每行末尾的所有空白 ,但是:

a)DBMS_LOB.TRIM(CLOB字段)是一个过程而不是一个函数; b)RTRIM(CLOB)不会失败,但无法实现这一目标。

如何解决我的问题?

请注意,每行开头的空格对于存储在CLOB字段中的PL / SQL源代码的缩进很有用,因此无法删除它们。

提前感谢您的帮助与合作。

2 个答案:

答案 0 :(得分:3)

要删除每行末尾的空格,可以使用regexp_replace()正则表达式函数:

regexp_replace(col, '\s+('||CHR(10)||'|$)', chr(10)) 

以下是一个示例(注意:replace函数仅用于突出显示空格):

with t1(col) as(
  select to_clob('begin  '||chr(10)||chr(32)||chr(32)||'something is going on here'||chr(32)||chr(32)||chr(10)|| 'end'||chr(32)||chr(32))
    from dual
)
select replace(col, ' ', '_') as with_spaces
     , replace(
               regexp_replace(col, '\s+('||CHR(10)||'|$)', chr(10))
               , ' '
               , '_'
               ) as without_spaces
  from t1

结果:

WITH_SPACES                           WITHOUT_SPACES
---------------------------------------------------------------------
begin__                               begin
__something_is_going_on_here__        __something_is_going_on_here
end__                                 end

答案 1 :(得分:0)

如果最后一行末尾有空格,则尼克的解决方案会增加一行。 应该是

regexp_replace(col, '\s+('||CHR(10)||'|$)', '\1')

即使这样也可以去除任何空白行。
更好的解决方案,但只处理尾随空格和制表符

regexp_replace(col, '[ ' ||chr(9)|| ']+$', '', 1, 0, 'm')