我们一般所说的静态SQL语句,是指每次调用时,语句是固定的(语句中变量的取值可能会不同);而动态SQL语句,每次调用时,则根据调用者的需要来临时拼出,这样语句就是不固定的。但是我们可以把静态SQL语句写的复杂一点,以达到一点点的“动态”的功能。
所谓静态SQL语句中的“动态”功能,实际上是在每次调用静态SQL语句时,通过为控制变量赋于不同的值,来使每静态SQL语句有一定的“选择”功能。
一般地讲,在 SELECT 语句的 SELECT 部分实现选择功能,可以用DECODE函数。
如:
SELECT DECODE(字段1,'A',字段A, 'B',字段B, 'C',字段C, 字段D) FROM 表名;
这样就可以根据每条记录的字段1的值来选择其它字段的值。当然这里要注重:字段A,B,C,D的类型要一致或可自动转换。
还可以在WHERE部分实现选择功能。
如:
SELECT …… FROM 表名
WHERE (其它必需的条件)
AND (C_V !='0' OR 可选条件1)
AND (C_V !='1' OR 可选条件2)
AND (C_V !='3' OR 可选条件3)
……
;
说明:
1。上面语句的含义为:当控制变量C_V为0时,按 可选条件1 来选择;当控制变量C_V为1时,按 可选条件2 来选择……
2。要注重,控制变量的名字不要与表中的原有字段名相同。
3。上面的这段程序可以写在 PROCEDURE 或 FUNCTION 中,控制变量可以作为过程或函数的输入参数。
4。省略号表示类似上面三行的语句可以写多次。
5。上面所述的 WHERE 部分中条件的选择,可以用在任何语句的WHERE部分中。
我想,以上的语句,也可以称做“伪动态SQL”吧!:)