2016-10-18 26 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)