Banyak operasi menggunakan DENGAN


16

Apakah ada cara untuk menjalankan beberapa operasi menggunakan WITHpernyataan?

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 ...

Jawaban:


17

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:

  • 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 KERING dalam kasus ini.


10

Tidak, CTE atau withklausa 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
.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.