มีวิธีการดำเนินการหลายการใช้WITH
คำสั่งหรือไม่
สิ่งที่ต้องการ
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
ฉันต้องการเลือกข้อมูลและจำนวนของมัน ...
มีวิธีการดำเนินการหลายการใช้WITH
คำสั่งหรือไม่
สิ่งที่ต้องการ
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
ฉันต้องการเลือกข้อมูลและจำนวนของมัน ...
คำตอบ:
คุณสามารถมีหนึ่งคำสั่งหลังจาก CTE อย่างไรก็ตามคุณสามารถกำหนด CTE ที่ตามมาโดยอ้างอิงจากก่อนหน้านี้:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
เนื่องจากคุณกำลังพยายามนับแถวและเติมเคอร์เซอร์อ้างอิงจากชุดผลลัพธ์เดียวกันมันอาจจะเหมาะสมกว่าหากทำอย่างใดอย่างหนึ่งต่อไปนี้:
สุดท้ายถ้าแบบสอบถามนั้นง่ายพอเพียงแค่เขียนหนึ่งครั้งเพื่อนับและอีกครั้งสำหรับเคอร์เซอร์ ความเรียบง่ายและความสามารถในการอ่านได้ดีกว่าหลักการDRYในกรณีนี้
ไม่ได้มีการกำหนด 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
ตาราง