Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

VARIABEL BIND PL/SQL untuk Perhitungan Volume Prisma Persegi Panjang

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 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghubungkan ke Oracle DB dari .NET?

  2. Oracle, cara membuka kursor dan memilih satu kolom dari banyak menjadi variabel

  3. java.util.Timestamp.after() salah saat membandingkan milidetik?

  4. Saat melakukan kueri terhadap tampilan, klausa pemfilteran dalam definisi tampilan diabaikan

  5. Bagaimana saya bisa menggunakan regex untuk membagi string, menggunakan string sebagai pembatas?