0

クエリから個別の 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;
4

1 に答える 1