Du har en navnekonflikt. Du har kaldt dine lokale variabler på samme måde som dine kolonnenavne, og kolonnenavnene har forrang, som angivet i dokumentationen:
Hvis en SQL-sætning refererer til et navn, der tilhører både en kolonne og enten en lokal variabel eller formel parameter, så har kolonnenavnet forrang.
Forsigtig:
Når en variabel eller et parameternavn fortolkes som et kolonnenavn, kan data slettes, ændres eller indsættes utilsigtet.
De første fire kontroller vil altid være sande (medmindre du har nul-værdier), så du får hver række, der er done = 'N'
.
Skift dine lokale variabelnavne til noget andet; det er ret almindeligt at bruge et præfiks til at skelne mellem lokale variabler, parametre og kolonner, sådan som:
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';
Hvis dette er i en lagret procedure i stedet for en anonym blok, kan du bruge proceduren/funktionsnavnet som et præfiks, hvilket nogle foretrækker. Hvis din procedure hed myproc
, for eksempel kan du gøre:
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';