के साथ कई ऑपरेशन


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 को पिछले एक के आधार पर परिभाषित कर सकते हैं:

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;

अस्थायी परिणाम सेट (यदि आपको करना है) को स्टोर करने के लिए 'सामान्य' ओरेकल तरीका जीटीटी:
GLOBAL TEMPORARYटेबल
का उपयोग करना है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.