PL/SQL で関数を作成していますが、一連のデータが複数回必要で、データベースを 1 回だけクエリしたいので、データをテーブルに保存します。
TYPE number_tbl IS TABLE OF NUMBER;
CURRENTFOOS number_tbl;
...
SELECT B.FOO BULK COLLECT
INTO CURRENTFOOS
FROM A, B
WHERE
...
ここで、テーブルに値が含まれているかどうかを確認したいCURRENTFOOS
ので、2 つ (またはそれ以上) の他のテーブルを作成します。
BADFOOS number_tbl := number_tbl (1, 2, 3);
MONDAYFOOS number_tbl := number_tbl (2, 3, 7, 8);
INTERSECTION number_tbl;
そして、悪い foo と monday foo をチェックするには:
INTERSECTION := CURRENTFOOS MULTISET INTERSECT BADFOOS;
IF INTERSECTION.COUNT > 0 THEN
RETURN -1; -- bad foo
END IF;
...some more steps...
INTERSECTION := CURRENTFOOS MULTISET INTERSECT MONDAYFOOS;
IF INTERSECTION.COUNT > 0 AND ISMONDAY THEN
RETURN 1337; -- monday foo
END IF;
色々悩んだ末にたどり着いたのがこれです。
これは私がやりたいことをするための慣用的な方法ですか?あまり目立たない方法はありますか?