การทำงานหลายอย่างโดยใช้ 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 อย่างไรก็ตามคุณสามารถกำหนด 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;

ว่า 'ปกติ' วิธีออราเคิลในการจัดเก็บชุดผลชั่วคราว (ถ้าคุณต้อง) คือการใช้GTT:
GLOBAL TEMPORARY
ตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.