我需要检查,如果过程参数为空,如果没有,则在WHERE子句中使用它。例如:在动态SQL中使用Oracle集合
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子句。我怎样才能解决这个问题没有太多的IFs?我认为可以使用Oracle集合,但我没有找到任何示例。
本页有一些讨论和指向文章的链接,我相信您指的是: http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID: 1669972300346534908 – 2010-08-26 00:31:54
Thx,那就是我一直在寻找=) – 2010-08-26 08:26:00
@帕特里克:谢谢,这就是我的意思。甲骨文似乎已经调整了他们的所有网址,并且美味的链接我已经不再工作了! – 2010-08-26 08:32:37