sql >> Databáze >  >> RDS >> Oracle

Kurzor v proceduře vrací více hodnot než dotaz

Máte konflikt jmen. Své lokální proměnné jste nazvali stejně jako názvy sloupců a názvy sloupců mají přednost, jak je uvedeno v dokumentaci:

Pokud příkaz SQL odkazuje na název, který patří jak ke sloupci, tak k lokální proměnné nebo formálnímu parametru, pak má název sloupce přednost.

Upozornění:
Když je název proměnné nebo parametru interpretován jako název sloupce, data mohou být smazána, změněna nebo neúmyslně vložena.

První čtyři kontroly budou vždy pravdivé (pokud nemáte hodnoty null), takže dostanete každý řádek, který má done = 'N' .

Změňte názvy místních proměnných na něco jiného; je docela běžné používat k rozlišení mezi lokálními proměnnými, parametry a sloupci předponu, něco jako:

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

Pokud je to v uložené proceduře, spíše než v anonymním bloku, můžete použít název procedury/funkce jako předponu, což někteří lidé preferují. Pokud se vaše procedura jmenovala myproc , můžete například udělat:

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. Jak nasadit aplikaci s databází serveru SQL na klientech

  2. Maximální doba provádění v phpMyAdmin

  3. Získejte součet sloupce MySQL v PHP

  4. UTF-8 až do konce