जैसा कि आपके पिछले प्रश्न का उत्तर
पर उल्लेख किया गया है , और एपीसी की टिप्पणी में, बाइंड वेरिएबल्स आपको यहां बहुत कुछ नहीं दे रहे हैं, लेकिन यह एक अभ्यास प्रतीत होता है, इसलिए... आपके पास जो कोड है वह 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
. दिखाता है ।