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

PLS-00402:V seznamu kurzoru SELECT je vyžadován alias, aby se předešlo duplicitním názvům sloupců

Váš problém je, že váš dotaz vybírá několik doslovných řetězcových hodnot bez nastavení jakýchkoli aliasů:

select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...

Ve výše uvedeném případě bude Oracle automaticky generovat ošklivé aliasy, které vypadají asi takto:

select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...

Jak tedy vidíte, nyní máte 3 velmi ošklivé názvy sloupců, se kterými je velmi nepohodlné pracovat, a 2 z nich jsou duplicitní, což vede k chybě, kterou dostáváte.

Zvažte, zda jim dát správné odlišné aliasy, abyste se vyhnuli nejednoznačnosti. Toto je pouze příklad, ale měli byste uvést smysluplnější alias podle významu hodnoty:

select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...

Legrační na tom je, že nejste aktuálně používá tyto 3 hodnoty při čtení dotazu ve smyčce kurzoru. Při čtení/procházení kurzorem místo pokusu o načtení 3 hodnot z kurzoru jednoduše znovu natvrdo zakódujete hodnoty, když je tisknete.

Takže ve skutečnosti, pokud se opravdu nestaráte o čtení 3 hodnot z kurzoru, stačí je z dotazu úplně odstranit. V opačném případě nahraďte pevně zakódované hodnoty z DBMS_OUTPUT.PUT_LINE(...) s aliasy, které nastavíte.

Takže jakmile bude váš dotaz opraven, místo:

DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);

Pravděpodobně byste měli použít kurzor takto:

DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);


  1. Data PHP mySql do souboru JSON

  2. MySql vyberte pole obsahující hodnoty null

  3. Jak mohu připojit databázi?

  4. php postgres od dotazu k načítání řádků teoreticky