2009-03-22 12 views
27

SQL सर्वर में, आप एक तालिका चर (DECLARE @table TABLE) घोषित कर सकते हैं, जिसे स्क्रिप्ट चलाया जाता है और फिर स्मृति से हटा दिया जाता है।क्या ओरेकल के पास SQL ​​सर्वर के तालिका चर के बराबर है?

क्या ओरेकल का एक समान कार्य है? या मैं CREATE/DROP बयान के साथ अटक गया हूं जो मेरी हार्ड ड्राइव सेगमेंट करता है?

+0

ओरेकल मेरी विशेष क्षमता नहीं है, लेकिन तालिका चर ओरेकल [संग्रह चर] (http://download.oracle का एक सबसेट होना दिखाई .com/डॉक्स/सीडी/B28359_01/appdev.111/b28370/संग्रह।htm # LNPLS00511) – cmsjr

उत्तर

18

हां।

पीएल/एसक्यूएल घोषित ब्लॉक में तालिका प्रकार चर घोषित करें। तालिका चर को इंडेक्स-टेबल या सरणी के रूप में भी जाना जाता है। तालिका चर में एक कॉलम होता है जो एक स्केलर या रिकॉर्ड डेटाटाइप और प्रकार की प्राथमिक कुंजी BINARY_INTEGER होना चाहिए। सिंटेक्स:; - फिर एक टेबल घोषित करने के लिए

table.column% प्रकार [नहीं NULL] बायनरी पूर्णांक सूचकांक | | चर% प्रकार

घोषित प्रकार TYPE_NAME (column_type तालिका है इस प्रकार के चर: variable_name TYPE_NAME;

- एक टेबल चर को मान आवंटित: variable_name (एन) .field_name: = 'कुछ पाठ'; - जहां 'एन'हैसूचकांक मूल्य

रेफरी: http://www.iselfschooling.com/syntax/OraclePLSQLSyntax.htm

तुम भी Global Temporary Tables

+3

कैसे मैं एक से अधिक स्तंभ के साथ एक मेज घोषणा कर सकते हैं? उदाहरण में: 2 कॉलम वाली तालिका। संख्या और वर्कर 2। – MTs

+0

रिकॉर्ड जहां रिकॉर्ड प्रत्येक पंक्ति – MikeT

+2

@MikeT तालिकाओं में शामिल है की एक तालिका बना कर - एसक्यूएल उत्पादों में - पंक्तियाँ, नहीं रिकॉर्ड है। कृपया, "रिकॉर्ड्स" शब्द का उपयोग करके दूसरों को भ्रमित न करें। जैसे एक तालिका या कई टेबल भर में कई जुड़ा हुआ पंक्तियों में एक ही पंक्ति हो सकता है –

0

पर एक नज़र लेने के लिए हाँ, यह एक प्रकार है कि एक प्रश्न के परिणाम सेट कर सकते हैं (यदि मुझे लगता है कि कर सकते हैं है चाहते हो सकता है क्या टेबल करता है)। ask Tom से: अपने प्रक्रिया कुछ ऐसा दिखाई देगा:

procedure p(p_state in varchar2, p_cursor in out ref_cursor_type) 
is 
begin 
    open p_cursor for select * from table where state = P_STATE; 
end; 

जहां p_cursor एक तालिका प्रकार की तरह है। जैसा कि पहले से ही उत्तर दिया गया है ओरेकल में परिणाम सेट संग्रहित करने के लिए बहुत सारे विकल्प हैं। आम तौर पर ओरेकल पीएल/एसक्यूएल sqlserver स्क्रिप्ट से कहीं अधिक शक्तिशाली है।

+1

है। मुझे लगता है कि मूल सवाल पूर्व के बारे में है। –

0

ऑरैकल में चर में तालिका एमएस एसक्यूएल सर्वर में तालिका चर के समान नहीं है। ऑरैकल में यह जावा या सी # में नियमित सरणी की तरह है। लेकिन एमएस एसक्यूएल सर्वर में यह किसी भी तालिका के समान है, आप इसे तार्किक तालिका कह सकते हैं। लेकिन यदि आप ऑरैकल में कुछ चाहते हैं जो SQLserver के तालिका चर के समान ही है, तो आप कर्सर का उपयोग कर सकते हैं।

संबंध

0

नीचे समाधान एसक्यूएल सर्वर मैं आज कर सकते हैं से सबसे करीब है।

वस्तुओं:

 

    CREATE OR REPLACE TYPE T_NUMBERS IS TABLE OF NUMBER; 

    CREATE OR REPLACE FUNCTION ACCUMULATE (vNumbers T_NUMBERS) 
    RETURN T_NUMBERS 
    AS 
     vRet T_NUMBERS; 
    BEGIN 
     SELECT SUM(COLUMN_VALUE) 
     BULK COLLECT INTO vRet 
     FROM TABLE(CAST(vNumbers AS T_NUMBERS)); 

     RETURN vRet; 
    END; 

क्वेरी:

 

    --Query 1: Fixed number list. 
    SELECT * 
    FROM TABLE(ACCUMULATE(T_NUMBERS(1, 2, 3, 4, 5))); 

    --Query 2: Number list from query. 
    WITH cteNumbers AS 
    (
     SELECT 1 AS COLUMN_VALUE FROM DUAL UNION 
     SELECT 2 AS COLUMN_VALUE FROM DUAL UNION 
     SELECT 3 AS COLUMN_VALUE FROM DUAL UNION 
     SELECT 4 AS COLUMN_VALUE FROM DUAL UNION 
     SELECT 5 AS COLUMN_VALUE FROM DUAL 
    ) 
    SELECT * 
    FROM TABLE(
      ACCUMULATE(
       (SELECT CAST(COLLECT(COLUMN_VALUE) AS T_NUMBERS) 
       FROM cteNumbers) 
      ) 
     ); 

+0

'vNumbers' को पहले से मौजूद प्रकार में कास्टिंग करने का क्या उद्देश्य है? –

संबंधित मुद्दे