2013-06-04 91 views
1

我想有这样的事情宏替换在SQL

condition := case {SOME_VAR} 
    when 1 then 'tbl.id = 3 and tbl.code = 6' 
    when 2 then 'tbl.id != 4 and tbl.code = 5' 
    when 3 then 'tbl.id = 2 and tbl.code != 7' 
    else '1 = 1' 
end 

select 
    * 
from 
    some_table tbl 
where 
    $condition 
; 

$condition将被相应的SQL代码从select上述条款所取代,有点像宏替换。这在Oracle中可能吗?

+0

你可以运行一些动态SQL。 –

+0

构建时或运行时“宏”更换? –

+0

这些条件只包含静态值,所以如果在编译时替换宏就足够了。 – tuxx

回答

0
select 
    * 
from 
    some_table tbl 
where 
    SOME_VAR = 1 and tbl.id = 3 and tbl.code = 6 or 
    SOME_VAR = 2 and tbl.id != 4 and tbl.code = 5 or 
    SOME_VAR = 3 and tbl.id = 2 and tbl.code != 7 
0

我不确定特别是甲骨文,但在SQL一般来说,是的,没有。

你不能做的正是你以后,但你引用的特定情况下,您可以

SELECT * 
FROM some_table tbl 
WHERE tbl.id = CASE {some_var} WHEN 1 THEN 3 
           WHEN 2 THEN 4 
           WHEN 3 THEN 2 
           ELSE tbl.id END 
AND tbl.code = CASE {some_var} WHEN 1 THEN 6 
           WHEN 2 THEN 5 
           WHEN 3 THEN 7 
           ELSE tbl.code END 
+0

不能这样做,因为条件可能很复杂。我编辑了原文。 – tuxx

+0

我有点害怕那个:-( – nurdglaw