Je hebt een naamconflict. U hebt uw lokale variabelen op dezelfde manier aangeroepen als uw kolomnamen, en de kolomnamen hebben voorrang, zoals vermeld in de documentatie:
Als een SQL-instructie verwijst naar een naam die zowel bij een kolom als bij een lokale variabele of formele parameter hoort, heeft de kolomnaam voorrang.
Let op:
Als een variabele of parameternaam wordt geïnterpreteerd als een kolomnaam, kunnen gegevens onbedoeld worden verwijderd, gewijzigd of ingevoegd.
De eerste vier controles zullen altijd waar zijn (tenzij je null-waarden hebt), dus je krijgt elke rij die done = 'N'
heeft .
Verander uw lokale variabelenamen in iets anders; het is vrij gebruikelijk om een voorvoegsel te gebruiken om onderscheid te maken tussen lokale variabelen, parameters en kolommen, zoiets als:
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';
Als dit in een opgeslagen procedure is, in plaats van in een anoniem blok, zou je de procedure/functienaam als voorvoegsel kunnen gebruiken, waar sommige mensen de voorkeur aan geven. Als uw procedure myproc
heette , u kunt bijvoorbeeld het volgende doen:
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';