it-swarm.asia

Beberapa operasi menggunakan DENGAN

Apakah ada cara untuk menjalankan beberapa operasi menggunakan pernyataan WITH?

Sesuatu seperti

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

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

Saya ingin memilih beberapa data dan hitungannya ...

16
BrunoLM

Anda hanya dapat memiliki satu pernyataan setelah CTE. Namun, Anda dapat menentukan 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:

  • buat tampilan
  • tahap sementara menghasilkan tabel temp

Akhirnya, jika kueri cukup sederhana, cukup tulis sekali untuk hitungan dan lagi untuk kursor. Kesederhanaan dan keterbacaan mengalahkan prinsip DRY dalam kasus ini.

17
Nick Chammas

Tidak, klausa CTE atau with didefinisikan dalam lingkup pernyataan tunggal

Namun, terkadang 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 GTT:
GLOBAL TEMPORARY table
.