Jawaban:
Anda hanya dapat memiliki satu pernyataan setelah CTE. Anda dapat, bagaimanapun, mendefinisikan CTE berikutnya berdasarkan yang sebelumnya:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Mengingat Anda mencoba untuk menghitung baris dan mengisi kursor ref dari set hasil yang sama, mungkin lebih tepat untuk melakukan salah satu dari yang berikut:
Akhirnya, jika kueri cukup sederhana, cukup tulis sekali untuk hitungan dan lagi untuk kursor. Kesederhanaan dan keterbacaan mengalahkan prinsip KERING dalam kasus ini.
Tidak, CTE atau with
klausa didefinisikan dalam lingkup pernyataan tunggal
Kadang-kadang Anda dapat melakukan lebih dari yang Anda harapkan dengan satu pernyataan, misalnya:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
Cara Oracle 'normal' untuk menyimpan set hasil sementara (jika perlu) adalah dengan menggunakan tabel GTT :
GLOBAL TEMPORARY
.