Seperti yang tercantum pada jawaban atas pertanyaan Anda sebelumnya
, dan dalam komentar APC, variabel ikat tidak memberi Anda banyak di sini, tetapi tampaknya ini adalah latihan, jadi... Kode yang Anda miliki menampilkan nilai OK dengan dbms_output
. Untuk menggunakan PRINT
sebagai gantinya, Anda tidak dapat mendeklarasikan d_volume
di blok PL/SQL karena akan keluar dari cakupan saat Anda keluar dari blok, jadi Anda perlu menjadikannya variable
juga:
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
Yang di SQL*Plus, dengan set verify off
untuk menghilangkan beberapa cruft, berikan:
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>
Anehnya itu tidak cukup bekerja di SQL Developer (3.1.07 atau 3.2.20); baris :d_volume := :d_length * :d_height * :d_width;
tidak memberikan nilai seperti yang diharapkan, sehingga dilaporkan sebagai nol. Anda dapat melakukan select :d_length * :d_height * :d_width into :d_volume from dual;
sebagai gantinya, yang masuk akal karena mereka adalah 'penampung dalam pernyataan SQL'. Tampaknya Anda masih tidak dapat mereferensikan :d_volume
dalam blok (yaitu dilaporkan sebagai null jika Anda dbms_output
itu), tetapi ditunjukkan oleh 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
Menariknya, dbms_output.put_line(':d_volume');
menunjukkan sesuatu seperti :ZSqlDevUnIq8
di Pengembang SQL; di SQL*Plus ini menunjukkan :d_volume
.