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

Apa perbedaan antara variabel ikat dan variabel substitusi (yang saya masukkan menggunakan &&)?

Anda tampaknya memiliki beberapa kebingungan tentang perbedaan antara variabel pengikatan di Oracle dan variabel substitusi di SQL*Plus.

Mari kita mulai dengan variabel substitusi. Variabel substitusi unik untuk SQL*Plus dan bukan bagian dari database. Mereka tidak akan berfungsi jika Anda mencoba menggunakannya dengan JDBC, misalnya.

Variabel substitusi hanya dapat menampung sepotong teks. Jika SQL*Plus menemukan variabel substitusi dalam baris input, variabel tersebut akan diganti dengan konten teksnya:

SQL> define subvar=X
SQL> select * from dual where dummy = &subvar;
old   1: select * from dual where dummy = &subvar
new   1: select * from dual where dummy = X
select * from dual where dummy = X
                                 *
ERROR at line 1:
ORA-00904: "X": invalid identifier

Perhatikan bahwa SQL*Plus mengganti variabel substitusi kami dengan nilai teksnya tanpa memperhatikan apakah itu memberi kami SQL yang valid. Pada contoh di atas, kami menghilangkan tanda kutip tunggal di sekitar &subvar dan itu memberi kami SQL yang tidak valid, jadi kami mendapat kesalahan.

Baris mulai old dan new tunjukkan baris yang kita masukkan sebelum dan sesudah SQL*Plus menerapkan variabel substitusi. new baris adalah baris yang coba dijalankan oleh database.

Anda dapat mengaktifkan atau menonaktifkan tampilan old dan new baris menggunakan SET VERIFY ON dan SET VERIFY OFF . Anda juga dapat mengaktifkan atau menonaktifkan penggantian variabel substitusi dengan menggunakan SET DEFINE ON dan SET DEFINE OFF .

Jika kita ingin menjalankan query di atas menggunakan variabel substitusi, kita harus memberi tanda kutip di sekitarnya:

SQL> select * from dual where dummy = '&subvar';
old   1: select * from dual where dummy = '&subvar'
new   1: select * from dual where dummy = 'X'

D
-
X

Jika &subvar kebetulan berisi string yang merupakan angka yang valid (mis. 5 ), maka kita bisa lolos tanpa menggunakan tanda kutip, tapi itu hanya karena mengeluarkan teks &subvar dan menggantinya dengan teks 5 kebetulan memberi kami SQL yang valid.

Misalnya, kita memiliki tabel bernama test dengan data berikut di dalamnya:

         A
----------
         1
         2
         3
         4
         5

Kemudian kita bisa melakukannya

SQL> define subvar=5
SQL> select * from test where a = &subvar;
old   1: select * from test where a = &subvar
new   1: select * from test where a = 5

         A
----------
         5

Variabel pengikat, di sisi lain, memiliki tipe. Itu bukan nilai teks sederhana. Nilainya dikirim ke database, dan database juga dapat mengatur nilainya.

SQL> variable bindvar varchar2(1);
SQL> exec :bindvar := 'X';

PL/SQL procedure successfully completed.

Anda tidak menempatkan tanda kutip di sekitar variabel bind saat Anda ingin menggunakannya:

SQL> select * from dual where dummy = :bindvar;

D
-
X

SQL> select * from dual where dummy = ':bindvar';

no rows selected

Pada contoh kedua di atas, kami tidak mendapatkan baris yang dikembalikan karena DUAL tabel tidak memiliki baris dengan DUMMY kolom yang berisi teks :bindvar .

Anda akan mendapatkan kesalahan jika mencoba menetapkan nilai dengan tipe yang salah ke variabel bind:

SQL> variable bindvar number;
SQL> exec :bindvar := 'X';
BEGIN :bindvar := 'X'; END;

*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1

Variabel ikat adalah bagian standar dari database, dan Anda dapat menggunakannya dengan JDBC atau metode koneksi mana pun ke database yang Anda pilih.

Terakhir, variable num1 number dan var num1 number keduanya memiliki arti yang sama. Keduanya mendefinisikan variabel pengikat num1 bertipe number . var hanyalah singkatan dari variable .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan Langkah-demi-Langkah untuk Menginstal MySQL di Windows

  2. Bagaimana cara menggunakan fungsi LISTAGG Oracle dengan filter unik?

  3. cara membuat tabel di oracle

  4. Memperbarui Tabel Di Oracle Jika Nilai Bidang Apa Pun Null Dan Menentukan Bahwa Pembaruan Berhasil

  5. Bukan bulan yang valid saat memasukkan data di oracle