質問
を使用して複数の操作を実行する方法はありますか 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
テーブル.
所属していません dba.stackexchange