sql >> Databasteknik >  >> RDS >> Oracle

PLS-00402:alias krävs i SELECT-listan med markör för att undvika dubbletter av kolumnnamn

Ditt problem är att din fråga väljer några bokstavliga strängvärden utan att ställa in några alias:

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

I ovanstående fall kommer Oracle att automatiskt generera fula alias som ser ut ungefär så här:

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

Så som du kan se har du nu 3 väldigt fula kolumnnamn som är väldigt besvärliga att arbeta med, och 2 av dem är dubbletter, vilket resulterar i felet du får.

Överväg att ge dem rätt distinkta alias för att undvika tvetydigheter. Detta är bara ett exempel, men du bör ge ett mer meningsfullt alias i enlighet med värdets betydelse:

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

Det roliga är att du inte är det använder för närvarande dessa 3 värden när du läser frågan i din markör för loop. När du läser/slingrar genom din markör, istället för att försöka läsa de 3 värdena från markören, hårdkodar du helt enkelt värdena igen när du skriver ut dem.

Så faktiskt, om du verkligen inte bryr dig om att läsa de 3 värdena från markören, ta bara bort dem från frågan helt och hållet. Annars byt ut dina hårdkodade värden från din DBMS_OUTPUT.PUT_LINE(...) med de alias som du ställt in.

Så när din fråga är åtgärdad, istället för:

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

Du bör förmodligen använda markören så här:

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


  1. pandor - Sammanfogning på strängkolumner fungerar inte (bugg?)

  2. 'hämta' i PDO får bara ett resultat

  3. Hur skapar jag en passthrough-fråga i access med en DSN-fri anslutning?

  4. optimera mysql-frågan med LIKE-operatorn för 10k poster