2012-02-23 10 views
8

मेरे पास समान मानों के साथ कुछ अलग चयन प्रश्न हैं। मैं डेक्लेयर की तरह कुछ उपयोग करना चाहता हूं लेकिन जब मैं एक साधारण डेक्लेयर लिखता हूं तो यह कहता है कि "आईएनटीओ" की उम्मीद है।परिवर्तनीय के साथ सरल "चयन करें" लेकिन "INTO" के बिना

अगर मुझे केवल "चयन" चाहिए, तो मैं इस फ़ॉर्म का उपयोग "INTO" कैसे कर सकता हूं?

SELECT * FROM my_table1 WHERE column1=5 and column2=6; 

और

SELECT * FROM my_table2 WHERE col1=5 and col2=6; 

अब मैं var_col1 और var_col2 की तरह एक चर घोषित करने और एक ही समय में दोनों का चयन प्रश्नों में उन्हें प्रयोग करना चाहते हैं:

सीधे शब्दों में मैं दो (या अधिक) का चयन करता है पहर।

मुझे लगा कि यह काम करेगा:

DECLARE 
var_col1 number := 5; 
var_vol2 number := 6; 
BEGIN 
SELECT * FROM my_table1 WHERE column1=var_col1 and column2=var_col2; 
SELECT * FROM my_table2 WHERE col1=var_col1 and col2=var_col1; 
/* and more SELECTs with var_col1 and var_col2 */ 
END; 

लेकिन कोई मौका नहीं ... एक प्रक्रिया या समारोह के बिना ऐसा कैसे तरीका है के लिए?

+0

आप किस SQL ​​क्लाइंट का उपयोग कर रहे हैं? –

+0

पीएल/एसक्यूएल डेवलपर –

उत्तर

6

जब आप एसक्यूएल * प्लस में select * from some_table; लिखते हैं, SQL*Plus डेटा के मामले में ग्राहक कार्यक्रम के रूप में काम कर रहा है, और आप के लिए बहुत काम करता है, कवर के तहत, डेटाबेस से लौटे जा रहा है, यह स्वरूपण और यह प्रदर्शित ।

जैसे ही आप DECLARE टाइप करते हैं, आप एक पीएल/एसक्यूएल ब्लॉक शुरू करते हैं। अब, आप पीएल/एसक्यूएल बुला रहे हैं, और पीएल/एसक्यूएल एसक्यूएल को कॉल कर रहा है। नतीजतन, आपको यह तय करने की आवश्यकता है कि पीएल/एसक्यूएल में एसक्यूएल से वापस आने वाले डेटा को कैसे संभाला जाए। ऐसा करने का तरीका, INTO खंड और आउटपुट प्राप्त करने के लिए एक चर के माध्यम से है। यह ध्यान में रखते हुए, SELECT से आउटपुट डेटा कहां जाएगा, यदि आप INTO खंड प्रदान नहीं करते हैं? इसे कहीं जाना है, है ना?

आशा है कि यह स्पष्ट है।

+1

ग्राहक के पास वापस जाने वाले मूल्य के साथ क्या गलत है ** ठीक है जैसे आपने 'घोषणा' ब्लॉक के बिना चयन किया है? – Sorpigal

2

यदि आप इसे इस तरह से करना चाहते हैं या कॉलम सेट करना चाहते हैं तो आपको अपने घोषित चर में चयन करना होगा। उदाहरण के लिए:

DECLARE 
var_col1 number := 5; 
var_vol2 number := 6; 
BEGIN 
    SELECT my_table1.var_col into var_col1 
    FROM my_table1 
    WHERE column1=var_col1 
     AND column2=var_col2; 
--etc..... 
END; 

या

DECLARE 
    var_col1 number := 5; 
    var_vol2 number := 6; 
    BEGIN 
     SELECT 5 into var_col1 
     FROM my_table1 
     WHERE column1=var_col1 
      AND column2=var_col2; 
    --etc..... 
    END; 

संपादित करें: मैं भी जोड़ना चाहिए कि आप भी उत्पादन Vvariables कि आप एसक्यूएल में उपयोग उत्पादन वापस जाने के लिए कर सकते हैं डिबगिंग आदि के साथ मदद करने के लिए आप कर सकते हैं तो घोषणा कर सकते हैं कुछ की तरह:

DECLARE 
out varchar2(200); 

और अपने शुरू बयान कर की तरह कुछ में:

dbms_output.put_line(out); 

जो कुछ संभावित उपयोगी जानकारी आउटपुट करता है (जो आपने निर्धारित किया है)।

+2

लेकिन मैं सभी कॉलम चुनना चाहता हूं? –

+0

और मुझे नहीं मिला, वास्तव में "इन" का उद्देश्य क्या है? डेक्लेयर के लिए इसका क्या अर्थ है? –

+0

फिर आप जो जवाब चाहते हैं वह @Edurado Ivanec का समाधान है। जहां आप BEGIN क्लॉज – northpole

1

आप PLSQL डेवलपर का उपयोग कर रहे हैं, जिसमें कई अलग-अलग विंडो प्रकारों का विकल्प है। अगर मुझे सही याद है, कमांड विंडो वह है जो एक एसक्यूएल * प्लस एमुलेटर है। यही कारण है कि इतना है कि यह काम किया जा रहा चाहिए:

var n1 number 
var n2 number 

exec &&n1 := 5 
exec &&n2 := 6 

SELECT * FROM my_table1 WHERE column1=&&n1 and column2=&&n2 ; 
SELECT * FROM my_table2 WHERE col1&&n1 and col2=&&n2; 

दूसरे शब्दों में, दो प्रतिस्थापन चर निर्धारित, उन्हें मान निर्दिष्ट और अंत में उन्हें आपके सभी प्रश्नों में तैनात।

+0

बहुत दिलचस्प "var" एक कीवर्ड है। लेकिन Pl/Sql डेवलपर इस सभी कथन को स्वीकार नहीं करता है। तो यह कोड काम नहीं करता है। वैसे, मुझे plsql के लिए "var" का उचित उपयोग नहीं मिल रहा है ... –

+0

@YasinOkumus: 'var' है * नहीं * पीएल/एसक्यूएल, यह एक पीएल/एसक्यूएल डेवलपर सुविधा है। आपको पीएल/एसक्यूएल डेवलपर मैनुअल –

+0

में इसे देखने की ज़रूरत है, धन्यवाद, मेरा मतलब पीएल/एसक्यूएल डेवलपर था। –

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