Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एक चुनिंदा वक्तव्य में चर घोषित करना और सेट करना

मैंने जो खोज की है उससे ऐसा प्रतीत होता है कि आप चुनिंदा बयानों में इस तरह के चर घोषित और सेट नहीं कर सकते हैं। क्या यह सही है या मुझे कुछ याद आ रहा है?

Oracle के भीतर PL/SQL और SQL दो अलग-अलग इंजन वाली दो अलग-अलग भाषाएँ हैं। आप पीएल/एसक्यूएल के भीतर एसक्यूएल डीएमएल एम्बेड कर सकते हैं, और इससे आपको चर मिलेंगे। जैसे निम्न अनाम PL/SQL ब्लॉक। / पर ध्यान दें अंत में PL/SQL का हिस्सा नहीं है, लेकिन SQL*Plus को पूर्ववर्ती ब्लॉक भेजने के लिए कहता है।

declare 
    v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
    v_Count number;
begin
    select count(*) into v_Count
    from Usage
    where UseTime > v_Date1;
    dbms_output.put_line(v_Count);
end;
/

समस्या यह है कि आपके टी-एसक्यूएल कोड के बराबर एक ब्लॉक काम नहीं करेगा:

SQL> declare 
  2      v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
  3  begin
  4      select VisualId
  5      from Usage
  6      where UseTime > v_Date1;
  7  end;
  8  /
    select VisualId
    *
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement

एक पीएल/एसक्यूएल, या तो एक अज्ञात ब्लॉक, संग्रहीत प्रक्रिया या संग्रहीत फ़ंक्शन से किसी क्वेरी के परिणामों को पास करने के लिए, एक कर्सर घोषित किया जाना चाहिए, खोला जाना चाहिए और फिर कॉलिंग प्रोग्राम में वापस आना चाहिए। (इस प्रश्न का उत्तर देने के दायरे से बाहर। संपादित करें: ऑरैकल संग्रहित प्रक्रिया से परिणाम प्राप्त करें देखें)

डेटाबेस से कनेक्ट होने वाले क्लाइंट टूल के अपने स्वयं के बाइंड वैरिएबल हो सकते हैं। एसक्यूएल*प्लस में:

SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';

PL/SQL procedure successfully completed.

SQL> -- Converting to a date, since the variable is not yet a date.
SQL> -- Note the use of colon, this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
  2  from Usage
  3  where UseTime > to_char(:v_Date1, 'DD-Mon-YYYY');

no rows selected

ध्यान दें कि उपरोक्त एसक्यूएल में हैप्लस, टॉड पीएल/एसक्यूएल डेवलपर, आदि में काम नहीं कर सकता (शायद नहीं होगा)। चर और निष्पादन से शुरू होने वाली लाइनें एसक्यूएल हैं प्लस कमांड। वे SQL या PL/SQL कमांड नहीं हैं। तालिका खाली होने के कारण कोई पंक्ति नहीं चुनी गई।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL क्वेरी Oracle में एकाधिक पंक्तियों से स्तंभ मानों को संयोजित करने के लिए

  2. Oracle डेटाबेस में Undo और Redo क्या है?

  3. सुरक्षित TO_NUMBER()

  4. SQL चयन कथन में पैकेज स्थिरांक का उपयोग कैसे करें?

  5. SQL में 2 दशमलव स्थानों तक गोल करना