クエリから個別の ASN_NO の数を取得して、ストアド プロシージャを複数見つけてエラーをスローした場合に後でチェックインしたいと考えています。
カーソルを開こうとする代わりに(これも適切に実行できませんでした)、一時テーブルの選択でそれを実行し、カーソルにデータを入力している間に値を保存できるのではないかと考えました。おそらくこれは不可能ですが、私のエラーは私には意味がありません。
これが私の簡略化されたコードです。エラーがどこにあったかをより正確に特定するために、カウントステートメントを分割しました。
V_ASN_COUNT NUMBER;
OPEN O_CURSOR FOR
WITH O_LIST AS(
SELECT *
FROM AN_ORDER_INFO OI, AN_SHIPMENT_INFO SI
-- where bunch of stuff
),
COUNT_ASN_NO AS (
SELECT COUNT(DISTINCT ASN_NO) AS "ASN_COUNT"
FROM O_LIST
),
SAVE_ASN_COUNT AS (
SELECT ASN_COUNT
INTO V_ASN_COUNT
FROM COUNT_ASN_NO -- error on this line, not enough values, its just 1:1, i dont get it?
)
SELECT * FROM O_LIST;
IF(V_ASN_COUNT > 1) THEN
RAISE MULTIPLE_ASNS;
END IF;
または、後でカーソルを開いて次のようなことをする必要があるかもしれませんが、これが間違っていることを知っている場合を除き、「BULK INTOを期待しています」というエラーが表示されます。
OPEN O_CURSOR;
LOOP
FETCH COUNT(DISTINCT ASN_NO) INTO V_ASN_COUNT;
EXIT WHEN ASN_NO%NOTFOUND;
END LOOP;
CLOSE O_CURSOR;