2016-12-28 60 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