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';