質問

を使用して複数の操作を実行する方法はありますか WITH 声明?

何かのようなもの

WITH T AS
(
  SELECT * FROM Tbl
)
BEGIN
  OPEN P_OUTCURSOR FOR
    SELECT * FROM T;

  SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;

いくつかのデータとそれのカウントを選択したい...

役に立ちましたか?

解決

CTEの後には1つのステートメントしか得られません。ただし、以前のCTEに基づいて、後続のCTEを定義できます。

WITH t1 AS (
   SELECT a, b, c
   FROM table1
)
, t2 AS (
   SELECT b
   FROM t1
   WHERE a = 5
)
SELECT *
FROM t2;

行を数え、同じ結果セットからREFカーソルを入力しようとしていることを考えると、次のいずれかを実行する方が適切かもしれません。

  • ビューを作成します
  • 一時的な結果を一時テーブルでステージにします

最後に、クエリが十分に単純な場合は、カウント用に1回、カーソル用にもう一度書き込みます。シンプルさと読みやすさは、 ドライ この場合の原則。

他のヒント

いいえ、CTEまたは with 節が定義されています 単一のステートメントの範囲内

ただし、単一のステートメントで期待される以上のことができる場合があります。

with w as (select v from t3)
insert all into t1(v) values(v)
           into t2(v) values(v)
select v from w;

一時的な結果セットを保存する「通常の」Oracleの方法(必要な場合)は、 GTT:
GLOBAL TEMPORARY テーブル
.

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top