Bạn có một cuộc xung đột tên. Bạn đã gọi các biến cục bộ của mình giống như tên cột và tên cột được ưu tiên, như đã lưu ý trong tài liệu:
Nếu câu lệnh SQL tham chiếu đến tên thuộc cả cột và biến cục bộ hoặc tham số hình thức thì tên cột sẽ được ưu tiên.
Thận trọng:
Khi tên biến hoặc tham số được hiểu là tên cột, dữ liệu có thể bị xóa, thay đổi hoặc chèn vào không chủ ý.
Bốn lần kiểm tra đầu tiên luôn đúng (trừ khi bạn có giá trị null), vì vậy bạn sẽ nhận được mọi hàng có done = 'N'
.
Thay đổi tên biến cục bộ của bạn thành một cái gì đó khác; khá phổ biến khi sử dụng tiền tố để phân biệt giữa các biến cục bộ, tham số và cột, chẳng hạn như:
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';
Nếu điều này nằm trong một thủ tục được lưu trữ, thay vì một khối ẩn danh, bạn có thể sử dụng tên thủ tục / hàm làm tiền tố, một số người thích. Nếu thủ tục của bạn được gọi là myproc
, ví dụ, bạn có thể làm:
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';