sql >> Database teknologi >  >> RDS >> Oracle

Markør i procedure, der returnerer flere værdier end forespørgsel

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';


  1. 2 måder at slette duplikerede rækker i MariaDB (ignorerer primærnøgle)

  2. Hvordan får man adgang til data/datamappe på Android-enhed?

  3. Top 9 tips til opsætning af din SQL Server-klynge

  4. TRIM() Funktion i Oracle