2016-10-18 47 views
1

早安動態SQL,如何將代碼''轉換爲動態SQL?

select CASE t.gift_club_start_date 
     WHEN ' ' THEN ' ' 
     ELSE SUBSTR(t.gift_club_start_date,5,2)|| '/' ||SUBSTR(t.gift_club_start_date,7,2)|| '/' ||SUBSTR(t.gift_club_start_date,1,4) 
     END 
from GIFT t 

這表明,如果行是空的,它顯示爲空。

我嘗試這樣做代碼動態SQL

'select CASE t.gift_club_start_date 
     WHEN '' '' THEN '' '' 
     ELSE SUBSTR(t.gift_club_start_date,5,2)|| ''/'' ||SUBSTR(t.gift_club_start_date,7,2)|| ''/'' ||SUBSTR(t.gift_club_start_date,1,4) 
     END 
from GIFT t' 

但輸出顯示這個//,當行是空的。

那麼我怎樣才能正確編碼顯示空行?這條線WHEN '' '' THEN '' ''

謝謝你這麼mcuh

回答

2

基本上,你可以使用雙'解決:

SQL> declare 
    2  vSQL varchar2(100); 
    3  vVar varchar2(100); 
    4 begin 
    5  vSQL := 'select '' '' from dual'; 
    6  execute immediate vSQL into vVar; 
    7  dbms_output.put_line('result:<' || vVar || '>'); 
    8 end; 
    9/
result:< > 

另一種方式可能是以下幾點:

SQL> declare 
    2  vSQL varchar2(100); 
    3  vVar varchar2(100); 
    4 begin 
    5  vSQL := q'[select ' ' from dual]'; 
    6  execute immediate vSQL into vVar; 
    7  dbms_output.put_line('result:<' || vVar || '>'); 
    8 end; 
    9/
result:< > 

對於您的情況,請注意「空」不同於' ';如果你需要檢查空值,你應該使用類似於

WHEN t.gift_club_start_date is NULL THEN... 
0

您可以使用||CHR(39)

'WHEN ' || CHR(39) || CHR(39) || ' THEN ' || CHR(39) || ' ' ||CHR(39)