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

आयताकार प्रिज्म वॉल्यूम गणना के लिए पीएल/एसक्यूएल बाइंड वैरिएबल

जैसा कि आपके पिछले प्रश्न का उत्तर पर उल्लेख किया गया है , और एपीसी की टिप्पणी में, बाइंड वेरिएबल्स आपको यहां बहुत कुछ नहीं दे रहे हैं, लेकिन यह एक अभ्यास प्रतीत होता है, इसलिए... आपके पास जो कोड है वह dbms_output के साथ ठीक मान प्रदर्शित करता है। . PRINT का उपयोग करने के लिए इसके बजाय, आप d_volume . घोषित नहीं कर सकते पीएल/एसक्यूएल ब्लॉक में क्योंकि जब आप ब्लॉक से बाहर निकलते हैं तो यह दायरे से बाहर हो जाएगा, इसलिए आपको इसे एक variable बनाना होगा। साथ ही:

VARIABLE d_length NUMBER;
VARIABLE d_height NUMBER;
VARIABLE d_width NUMBER;
VARIABLE d_volume NUMBER;

BEGIN
    :d_length := &q_length;
    :d_height := &q_height;
    :d_width := &q_width;

    :d_volume := :d_length * :d_height * :d_width;
END;
/

print d_length
print d_height
print d_width
print d_volume

जो SQL*प्लस में set verify off . के साथ है कुछ cruft को हटाने के लिए देता है:

Enter value for q_length: 3
Enter value for q_height: 4
Enter value for q_width: 5

PL/SQL procedure successfully completed.


  D_LENGTH
----------
         3


  D_HEIGHT
----------
         4


   D_WIDTH
----------
         5


  D_VOLUME
----------
        60

SQL>

मजे की बात यह है कि SQL डेवलपर (3.1.07 या 3.2.20) में काफी काम नहीं करता है; लाइन :d_volume := :d_length * :d_height * :d_width; अपेक्षित मान निर्दिष्ट नहीं करता है, इसलिए इसे शून्य के रूप में रिपोर्ट किया जाता है। आप select :d_length * :d_height * :d_width into :d_volume from dual; इसके बजाय, जो कुछ समझ में आता है क्योंकि वे 'एसक्यूएल स्टेटमेंट्स में प्लेसहोल्डर' हैं। ऐसा प्रतीत होता है कि आप तब भी :d_volume . का संदर्भ नहीं दे सकते ब्लॉक के भीतर (अर्थात यदि आप dbms_output it), लेकिन यह print . द्वारा दिखाया जाता है ।

BEGIN
    :d_length := &q_length;
    :d_height := &q_height;
    :d_width := &q_width;

    select :d_length * :d_height * :d_width into :d_volume from dual;
    dbms_output.put_line('d_volume inside the block: ' || :d_volume);
END;
/

anonymous block completed
d_volume inside the block: 

D_LENGTH
-
3

D_HEIGHT
-
4

D_WIDTH
-
5

D_VOLUME
--
60

दिलचस्प है, dbms_output.put_line(':d_volume'); कुछ इस तरह दिखाता है :ZSqlDevUnIq8 एसक्यूएल डेवलपर में; SQL*प्लस में यह :d_volume . दिखाता है ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Solaris libc . में ioctl प्रोटोटाइप

  2. Oracle:मैं डिलीट क्लॉज में ROWNUM पर भरोसा क्यों नहीं कर सकता?

  3. ऑरैकल में स्प्लिट और लेफ्ट जॉइन कैसे करें?

  4. Oracle to_date (शाब्दिक) के प्रारूप के आधार पर अनुक्रमित कॉलम का उपयोग या उपेक्षा करता है

  5. मैं ओरेकल एसक्यूएल में सभी प्रबंधकों के नाम और उनके सभी प्रबंधकों के नाम ढूंढना चाहता हूं