2016-10-17 21 views
0

私は、クエリから値を割り当てるための変数を宣言しませんでした。なぜ、以下のコードでINTO句のエラーがスローされるのですか?selectステートメントでINTO句が必要なのはなぜですか?

create or replace PROCEDURE Disp_of_IPC_Crime_Case(
    startDate DATE, 
    endDate DATE) 
IS 

BEGIN 
    SELECT * 
    FROM (
      SELECT COUNT(*) 
      FROM t_crime_major_minor_heads cdmh 
      INNER JOIN t_fir_registration fr 
      ON fr.FIR_REG_NUM= cdmh.FIR_REG_NUM 
      INNER JOIN t_final_report fnr 
      ON fnr.FIR_REG_NUM = cdmh.FIR_REG_NUM 
      WHERE MAJOR_HEAD_CD = 8 
      AND fr.RECORD_CREATED_ON > (StartDate - INTERVAL '5' YEAR) 
      AND NVL(fnr.FR_TYPE_CD,0) =11 
      AND NVL(fnr.CHARGSHEET_OR_NOT,'')='N' 
    ) Below5COUNTERFEITING; 
END; 
+5

クエリの結果をどこかに保存する必要があるため、エラーが発生します。結果を使って文を実行することはできません(派生テーブルはまったく役に立たない) –

+2

PLSQLブロックでは、クエリの結果をフェッチするための変数が必要です。単純なSQLと同じクエリを実行するだけで結果が得られますが、ブロック(匿名、関数、プロシージャなど)で値を変数にフェッチし、変数を使用する必要があります – Aleksej

答えて

1

手順の目的は、レポートを提供することである場合は、passing back a ref cursorによってこれを行うことができ、またはそれ以降のOracle 12.1持っているかどうかは、新しいimplicit statement result機能を使用することができます。

関連する問題