2016-12-28 31 views
1

我想用翻译()或正则表达式总会给我一个新的生产线甲骨文如何使用换行从字符串

例子来换行

CALC_LENGTH :=regexp_replace(CALC_LENGTH, '([\x0B|)', ' '); 
CALC_LENGTH :=translate(CALC_LENGTH, chr(11), '  '); 

if PR is null then 
CALC_LENGTH :=regexp_replace(CALC_LENGTH, '([\x0B|)', ' '); 
else 
CALC_LENGTH := where var1 >var2; 
end if; 

BEGIN 
select ..... from tab1 
'||CALC_LENGTH||' 
    insert into.... 
endif; 

如果pr为空,即使使用trasnalte或regexp,我也会得到空行的结果。

select ..... from tab1 

insert into.... 

我想我喜欢下面的输出结果:

select ..... from tab1 
insert into.... 

回答

1

尝试翻译的功能,它已经为我很多次在过去,CHR。我不确定哪个ASCII将映射到所需的输出,你可以参考下面的块,并保持所需的CHR语句(多个):

DECLARE 
    CALC_LENGTH VARCHAR2(100); 

BEGIN 
    CALC_LENGTH := 'Hi!'||chr(10)||'i'||CHR(11)||'z'||CHR(12)||'y'||chr(13)||'a'; 
    CALC_LENGTH :=regexp_replace(CALC_LENGTH, '[\x0B|]', ' '); 
    CALC_LENGTH := TRANSLATE(CALC_LENGTH, CHR(10), ' '); 
    CALC_LENGTH := TRANSLATE(CALC_LENGTH, CHR(11), ' '); 
    CALC_LENGTH := TRANSLATE(CALC_LENGTH, CHR(12), ' '); 
    CALC_LENGTH := TRANSLATE(CALC_LENGTH, CHR(13), ' '); 
    DBMS_OUTPUT.PUT_LINE('select ..... from tab1'|| 
         CALC_LENGTH|| 
         'insert into....'); 
END; 
/
+0

好吧,我没有尝试翻译功能,但它总是给我空行 – Moudiz

+0

我认为,而不是CHR(13),如果你全部替换10,11,12,你会得到所需的输出。由于ASCII中的新行是10.根据您使用的操作系统和软件包。一条新线可以表示为LF + CR或CR + LF或者仅仅是CR。 CR代表回车是ASCII码13. –

+0

我加了10 11 12 13,我在这样的字符串中使用了calc_length Text ='Insert'|| CALC_LENGTH ||' ....'会产生这种效果吗? – Moudiz