2

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

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

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

我该如何解决我的问题?

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

预先感谢您的帮助与合作。

4

2 回答 2

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
于 2013-07-31T08:32:04.433 回答
0

如果最后一行有任何尾随空格,那么尼克的解决方案会添加一个额外的行。
它应该是

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

Even 以便去除任何空白行。
更好的这个解决方案,但它只处理尾随空格和制表符

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

于 2019-06-08T01:15:00.467 回答