WITHを使用した複数の操作


16

使用して複数の操作を実行する方法があるWITH文は?

何かのようなもの

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

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

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

回答:


17

CTEの後に記述できるのは1つだけです。ただし、前のものに基づいて後続のCTEを定義できます。

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

行をカウントし、同じ結果セットから参照カーソルを作成しようとしている場合、次のいずれかを実行する方が適切な場合があります。

  • ビューを作成する
  • 一時テーブルに一時的な結果をステージングする

最後に、クエリが非常に単純な場合は、カウントのために一度だけ記述し、カーソルに対してもう一度記述します。この場合、シンプルさと読みやすさがDRYの原則に優先します。


10

いいえ、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テーブル
を使用することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.