1

selectステートメントのwhere条件にnull許容変数があるかどうか疑問に思っていました。以下のように、同じ select ステートメントを 2 回記述するには、IF 条件を使用する必要がありますか? より良い方法はありますか?

FUNCTION function1(
    foo   IN  INTEGER,
  ) RETURN INTEGER
    ret      INTEGER;
  BEGIN

IF foo IS NULL THEN
  SELECT COUNT(*) INTO ret FROM t WHERE t.col IS NULL;
ELSE
  SELECT COUNT(*) INTO ret FROM t WHERE t.col = foo;
END IF;
RETURN ret;

END function1;
4

1 に答える 1

2

あなたはいつでもできる

SELECT COUNT(*) 
  INTO ret 
  FROM t 
 WHERE (t.col IS NULL AND foo IS NULL)
    OR t.col = foo;

それは次のように単純化できます

SELECT COUNT(*) 
  INTO ret 
  FROM t 
 WHERE NVL(t.col, 'Some Impossible Value') = NVL(foo, 'Some Impossible Value');

NVL(t.col, 'Some Impossible Value')ただし、クエリのパフォーマンスを向上させるには、関数ベースのインデックスが必要になる場合があります。

于 2012-08-16T16:29:12.997 に答える