Oracle
 sql >> база данни >  >> RDS >> Oracle

Курсорът в процедурата връща повече стойности от заявката

Имате конфликт с имената. Вие извикахте вашите локални променливи по същия начин като имената на колоните и имената на колоните имат предимство, както е отбелязано в документацията:

Ако SQL израз препраща към име, което принадлежи както на колона, така и на локална променлива или формален параметър, тогава името на колоната има предимство.

Внимание:
Когато името на променлива или параметър се интерпретира като име на колона, данните могат да бъдат изтрити, променени или вмъкнати неволно.

Първите четири проверки винаги ще бъдат верни (освен ако нямате нулеви стойности), така че ще получите всеки ред с done = 'N' .

Променете имената на вашите локални променливи на нещо друго; доста често е да се използва префикс за разграничаване между локални променливи, параметри и колони, нещо като:

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

Ако това е в съхранена процедура, а не в анонимен блок, можете да използвате името на процедурата/функцията като префикс, което някои хора предпочитат. Ако вашата процедура се е наричала myproc , например, можете да направите:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NLS_INITCAP() Функция в Oracle

  2. как да промените размера на колона

  3. По-бърз начин за вмъкване чрез скрипт в Oracle?

  4. Кога Oracle индексира стойности на нулеви колони?

  5. 2 начина за връщане на редове, които съдържат само буквено-цифрови знаци в Oracle