sql >> Databasteknik >  >> RDS >> Oracle

Markör i proceduren returnerar fler värden än fråga

Du har en namnkonflikt. Du har kallat dina lokala variabler på samma sätt som dina kolumnnamn, och kolumnnamnen har företräde, som anges i dokumentationen:

Om en SQL-sats refererar till ett namn som tillhör både en kolumn och antingen en lokal variabel eller formell parameter, har kolumnnamnet företräde.

Varning:
När en variabel eller parameternamn tolkas som ett kolumnnamn kan data raderas, ändras eller infogas oavsiktligt.

De första fyra kontrollerna kommer alltid att vara sanna (såvida du inte har nollvärden), så du får varje rad som har done = 'N' .

Ändra dina lokala variabelnamn till något annat; det är ganska vanligt att använda ett prefix för att skilja mellan lokala variabler, parametrar och kolumner, ungefär 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';

Om detta är i en lagrad procedur, snarare än ett anonymt block, kan du använda proceduren/funktionsnamnet som ett prefix, vilket vissa föredrar. Om din procedur hette myproc , till exempel kan du göra:

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. Returnera endast numeriska värden i MariaDB

  2. Hur man väljer data från en tabell från en annan databas i SQL Server?

  3. Ansluter MS SQL till IRI Workbench

  4. Välj en kolumn om den andra kolumnen är null