Masz konflikt nazw. Nazwałeś swoje zmienne lokalne tak samo jak nazwy kolumn, a nazwy kolumn mają pierwszeństwo, jak wspomniano w dokumentacji:
Jeśli instrukcja SQL odwołuje się do nazwy, która należy zarówno do kolumny, jak i do zmiennej lokalnej lub parametru formalnego, wówczas pierwszeństwo ma nazwa kolumny.
Uwaga:
Gdy nazwa zmiennej lub parametru jest interpretowana jako nazwa kolumny, dane mogą zostać przypadkowo usunięte, zmienione lub wstawione.
Pierwsze cztery sprawdzenia zawsze będą prawdziwe (chyba że masz wartości null), więc otrzymasz każdy wiersz, który ma done = 'N'
.
Zmień nazwy zmiennych lokalnych na inne; dość często używa się prefiksu do rozróżniania lokalnych zmiennych, parametrów i kolumn, coś takiego:
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';
Jeśli jest to procedura składowana, a nie anonimowy blok, możesz użyć nazwy procedury/funkcji jako prefiksu, co niektórzy wolą. Jeśli twoja procedura nazywała się myproc
, na przykład możesz zrobić:
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';