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

Kursor dalam prosedur mengembalikan lebih banyak nilai daripada kueri

Anda memiliki konflik nama. Anda telah memanggil variabel lokal Anda sama dengan nama kolom Anda, dan nama kolom didahulukan, seperti yang dicatat dalam dokumentasi:

Jika pernyataan SQL mereferensikan nama yang termasuk dalam kolom dan variabel lokal atau parameter formal, maka nama kolom akan diutamakan.

Perhatian:
Bila nama variabel atau parameter ditafsirkan sebagai nama kolom, data dapat dihapus, diubah, atau disisipkan secara tidak sengaja.

Empat pemeriksaan pertama akan selalu benar (kecuali jika Anda memiliki nilai nol), jadi Anda akan mendapatkan setiap baris yang memiliki done = 'N' .

Ubah nama variabel lokal Anda menjadi sesuatu yang lain; cukup umum menggunakan awalan untuk membedakan antara variabel lokal, parameter, dan kolom, seperti:

Cursor linija IS 
SELECT *
FROM table_x X
where x.mjt = l_mjt
and   x.salesman = l_salesman
and x.kind = l_kind
and x.kolo1 = l_kolo1
and x.done = 'N';

Jika ini dalam prosedur tersimpan, daripada blok anonim, Anda dapat menggunakan nama prosedur/fungsi sebagai awalan, yang lebih disukai beberapa orang. Jika prosedur Anda disebut myproc , misalnya, Anda dapat melakukan:

Cursor linija IS 
SELECT *
FROM table_x X
where x.mjt = myproc.mjt
and   x.salesman = myproc.salesman
and x.kind = myproc.kind
and x.kolo1 = myproc.kolo1
and x.done = 'N';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghubungkan ke Oracle 12c Database dari Pentaho Data Integration (Kettle) Community Edition

  2. Tidak ada pemetaan Dialek untuk tipe JDBC:-9

  3. Tambahkan data yang hilang dari bulan atau tahun sebelumnya secara kumulatif

  4. Apa Presisi dan Skala default untuk Angka di Oracle?

  5. Dapatkan nama prosedur atau fungsi pemanggilan di Oracle PL/SQL