【发布时间】:2010-08-26 08:34:38
【问题描述】:
我需要检查过程参数是否为空,如果不是,则在 WHERE 子句中使用它。例如:
sqlquery := 'SELECT * FROM table WHERE a_col = a AND';
IF b IS NOT NULL THEN
sqlquery := sqlquery || ' b_col = :b';
END IF;
IF c IS NOT NULL THEN
sqlquery := sqlquery || ' c_col = :c';
END IF;
等等。
然后我需要使用 OPEN-FOR-USING 语句为已形成的 sqlquery 打开游标,但之前我应该决定通过 USING 子句发送哪些值。我看到的唯一方法是使用大量的 IF 子句:
IF b IS NOT NULL AND c IS NOT NULL THEN
OPEN cur FOR sqlquery USING b, c;
ELSIF b IS NOT NULL THEN
OPEN cur FOR sqlquery USING b;
ELSIF c IS NOT NULL THEN
OPEN cur FOR sqlquery USING c;
ELSE
OPEN cur FOR sqlquery;
对于 N 个值,我得到大量的 IF 子句。如果没有很多 IF,我该如何解决这个问题?我认为可以使用 Oracle Collections,但我没有找到任何示例。
【问题讨论】:
标签: oracle collections dynamic-sql