2011-09-26 12 views
26

में एक चयन करें क्वेरी से अपने मूल्य स्थापित करने एसक्यूएल सर्वर में हम इस का उपयोग कर सकते हैं:एक चर घोषणा और Oracle

DECLARE @variable INT; 
SELECT @variable= mycolumn from myTable; 

मैं कैसे Oracle में एक ही कर सकते हैं?

DECLARE COMPID VARCHAR2(20); 
SELECT companyid INTO COMPID from app where appid='90' and rownum=1; 

क्यों नहीं है काम कर: मैं वर्तमान में निम्नलिखित कर रहा हूँ?

enter image description here

+0

कोई विचार यह कैसे वस्तुओं के रूप में प्रकार के लिए काम कर सकते हैं? – Avias

उत्तर

54

SELECT INTO

DECLARE 
    the_variable NUMBER; 

BEGIN 
    SELECT my_column INTO the_variable FROM my_table; 
END; 

सुनिश्चित करें कि क्वेरी केवल एक ही पंक्ति रिटर्न बनाओ:

डिफ़ॉल्ट रूप से, एक का चयन करें जांच बयान केवल एक पंक्ति लौट जाना चाहिए। अन्यथा, पीएल/एसक्यूएल पूर्वनिर्धारित अपवाद TOO_MANY_ROWS बढ़ाता है और INTO खंड में चर के मान अपरिभाषित हैं। सुनिश्चित करें कि आपका WHERE क्लॉज केवल एक पंक्ति से मेल खाने के लिए पर्याप्त है

यदि कोई पंक्तियां वापस नहीं आती हैं, तो पीएल/एसक्यूएल NO_DATA_FOUND बढ़ाता है। आप एक असाधारण फ़ंक्शन, जैसे COUNT (*) या AVG(), जहां व्यावहारिक परिणाम का चयन करके इस अपवाद के खिलाफ सुरक्षा कर सकते हैं। इन कार्यों को एक एकल मूल्य वापस करने की गारंटी है, भले ही कोई पंक्ति स्थिति से मेल न हो।

एक चयन ... बल्क संग्रह में कथन कई पंक्तियों को वापस कर सकता है। परिणामों को पकड़ने के लिए आपको संग्रह चर सेट अप करना होगा। आप सहयोगी सरणी या नेस्टेड टेबल घोषित कर सकते हैं जो पूरे परिणाम सेट को पकड़ने के लिए आवश्यक हो जाते हैं।

निहित कर्सर एसक्यूएल और इसके गुण% नोटफॉन्ड,% फाउंड,% ROWCOUNT, और% ISOPEN एक चयन INTO कथन के निष्पादन के बारे में जानकारी प्रदान करते हैं।

+0

DECLARE COMPID VARCHAR2 (20); एसएएसएपीएक्सिकेशन से COMPID में कंपनी चुनें जहां एपिड = '90 'और राउनम = 1; क्या आप बता सकते हैं कि यह एसक्यूएल – user960567

+0

त्रुटि क्यों फेंक रहा है और त्रुटि संदेश होगा? – Thilo

+0

बस ऊपर देखें। – user960567

4

पूरी तरह से सुनिश्चित करें कि आप के बाद लेकिन PL/SQL तुम बस

DECLARE 
    v_variable INTEGER; 
BEGIN 
    SELECT mycolumn 
    INTO v_variable 
    FROM myTable; 
END; 

ओली में क्या कर रहे हैं नहीं।

+0

@ थिलो राज्यों के रूप में, इस विशिष्ट synatx के आसपास विचार करने के लिए और भी कुछ है। आप जो हासिल करने की कोशिश कर रहे हैं उस पर थोड़ी अधिक जानकारी हमें आपके चर को पॉप्युलेट करने के लिए एक बेहतर विधि तैयार करने में सक्षम बनाती है। – Ollie

0

ORA-01,422: सटीक रिटर्न अधिक पंक्तियों

का अनुरोध किया संख्या की तुलना में लाने यदि आप जहां हालत का उपयोग करके सटीक रिकॉर्ड निर्दिष्ट नहीं करते हैं, आप ऊपर अपवाद मिल जाएगा

DECLARE 
    ID NUMBER; 
BEGIN 
    select eid into id from employee where salary=26500; 
    DBMS_OUTPUT.PUT_LINE(ID); 
END; 
0

क्वेरी में चयन से एक चर में एकल पंक्ति आउटपुट संग्रहीत करने के लिए:

v_username varchare (20) घोषित करें; उपयोगकर्ता नाम से v_username में उपयोगकर्ता नाम चुनें जहां उपयोगकर्ता_आईडी = '7';

यह एक एकल रिकॉर्ड के वैरिएबल v_username में संग्रहीत करेगा।


क्वेरी में चयन से एक चर में कई पंक्तियों उत्पादन के भंडारण के लिए:

आप listagg समारोह का उपयोग करने के लिए है।listagg एक coloumn की परिणामी पंक्तियों को एक एकल coloumn में जोड़ना और उन्हें अलग करने के लिए आप एक विशेष प्रतीक का उपयोग कर सकते हैं। नीचे से क्वेरी के रूप में क्वेरी का उपयोग करें (उपयोगकर्ता नाम द्वारा 'उपयोगकर्ता नाम) उपयोगकर्ता नाम से v_username में;

0

एक अतिरिक्त बिंदु:

आप tsql से plsql आपके पास करने के लिए परिवर्तित कर रहे हैं जब चिंता करने की no_data_found के बारे में अपवाद

DECLARE 
    v_var NUMBER; 
BEGIN 
    SELECT clmn INTO v_var FROM tbl; 
Exception when no_data_found then v_var := null; --what ever handle the exception. 
END; 

में tsql अगर no data found तो चर null हो जाएगा, लेकिन कोई exception

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