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

Mempelajari Variabel Bind dalam PL/SQL beserta Perhitungan Input dan Output DBMS_OUTPUT.PUT_LINE

Variabel ikat dan variabel substitusi adalah hal yang berbeda, sehingga kata-kata masalah menyesatkan. Dan itu hanya versi SQL*Plus dari variabel bind; itu dapat memiliki arti yang sedikit berbeda (atau setidaknya kurang jelas) untuk pengurai.

Pada dasarnya Anda membingungkan variabel PL/SQL dengan variabel substitusi SQL*Plus. Saat Anda mereferensikan &d_length Anda mendefinisikan variabel substitusi, dan pengguna akan dimintai nilainya pada saat itu. Tapi itu benar-benar independen dari d_length di PL/SQL DECLARE blokir.

Anda dapat melihat ACCEPT perintah untuk cara yang rapi untuk mendapatkan nilai dari pengguna sebelum Anda mulai memblokir, tetapi Anda juga dapat melakukannya seperti ini:

SET SERVEROUTPUT ON
DECLARE
    d_length    NUMBER := &q_length;
    d_height    NUMBER := &q_height;
    d_width     NUMBER := &q_width;
    d_volume    NUMBER;
BEGIN
    DBMS_OUTPUT.PUT_LINE('The length dimension is: ' || d_length);
    DBMS_OUTPUT.PUT_LINE('The height dimension is: ' || d_height);
    DBMS_OUTPUT.PUT_LINE('The width dimension is: ' || d_width);  

    d_volume := d_length * d_height * d_width;

    DBMS_OUTPUT.PUT_LINE(
        'The rectangular prism volume for the swimming pool is: ' 
           || d_volume);

   DBMS_OUTPUT.PUT_LINE(
       'The dimensions of the swimming pool are ' || '?');
END;
/

Tidak yakin apa yang Anda inginkan untuk ditampilkan pada baris keluaran terakhir; apakah itu berbeda dari tiga dimensi yang sudah ditampilkan?

Anda juga dapat melakukannya dengan variabel bind dengan mendefinisikannya dengan VARIABLE perintah :

SET SERVEROUTPUT ON
VARIABLE d_length NUMBER;
VARIABLE d_height NUMBER;
VARIABLE d_width NUMBER;

DECLARE 
    d_volume    NUMBER;
BEGIN
    :d_length := &q_length;
    :d_height := &q_height;
    :d_width := &q_width;

    DBMS_OUTPUT.PUT_LINE('The length dimension is: ' || :d_length);
    DBMS_OUTPUT.PUT_LINE('The height dimension is: ' || :d_height);
    DBMS_OUTPUT.PUT_LINE('The width dimension is: ' || :d_width);  

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

    DBMS_OUTPUT.PUT_LINE(
        'The rectangular prism volume for the swimming pool is: ' 
           || d_volume);

   DBMS_OUTPUT.PUT_LINE(
       'The dimensions of the swimming pool are ' || '?');
END;
/

Perhatikan bahwa d_length , d_height dan d_width diawali dengan titik dua dalam versi ini, karena itu adalah variabel pengikat. Tapi d_volume bukan karena itu masih dideklarasikan di blok PL/SQL. Dan nilai aktual masih diambil dari pengguna sebagai variabel substitusi. Ini agak berbelit-belit; membuatnya mengikat variabel tidak benar-benar menambahkan apa pun di sini.




  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 melakukan FULL OUTER JOIN di ORACLE menggunakan operator '+'?

  2. Dalam SQL bagaimana cara membuat kesalahan saat memperbarui nilai 'bukan nol' dalam tabel database

  3. di mana klausa memilih kode istilah

  4. Sisipkan Massal ke dalam database Oracle:Mana yang lebih baik:UNTUK loop kursor atau Select sederhana?

  5. Apakah mungkin bagi Oracle sqlldr untuk menerima entri TNS sebagai kualifikasi instans di Oracle 10 dan 11?