Tienes un conflicto de nombres. Ha llamado a sus variables locales de la misma manera que los nombres de sus columnas, y los nombres de las columnas tienen prioridad, como se indica en la documentación:
Si una instrucción SQL hace referencia a un nombre que pertenece tanto a una columna como a una variable local o un parámetro formal, entonces el nombre de la columna tiene prioridad.
Precaución:
Cuando el nombre de una variable o parámetro se interpreta como un nombre de columna, los datos se pueden eliminar, cambiar o insertar sin querer.
Las primeras cuatro comprobaciones siempre serán verdaderas (a menos que tenga valores nulos), por lo que obtendrá cada fila que tenga done = 'N'
.
Cambie los nombres de sus variables locales a otra cosa; es bastante común usar un prefijo para distinguir entre variables locales, parámetros y columnas, algo como:
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';
Si esto está en un procedimiento almacenado, en lugar de un bloque anónimo, puede usar el nombre del procedimiento/función como prefijo, lo que algunas personas prefieren. Si su procedimiento se llamó myproc
, por ejemplo, podrías hacer:
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';