sql >> Database teknologi >  >> RDS >> Oracle

PLS-00402:alias påkrævet i SELECT-listen over markør for at undgå dublerede kolonnenavne

Dit problem er, at din forespørgsel vælger nogle få bogstavelige strengværdier uden at angive nogen aliaser:

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

I ovenstående tilfælde vil Oracle automatisk generere grimme aliaser, der ser sådan ud:

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

Så som du kan se, har du nu 3 meget grimme kolonnenavne, som er meget besværlige at arbejde med, og 2 af dem er dublerede, hvilket resulterer i den fejl, du får.

Overvej at give dem de rigtige adskilte aliaser for at undgå tvetydigheden. Dette er kun et eksempel, men du bør give et mere meningsfuldt alias i henhold til betydningen af ​​værdien:

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

Det sjove er, at du ikke er bruger i øjeblikket disse 3 værdier, når du læser forespørgslen i din cursor for loop. Når du læser/løkker gennem din markør, i stedet for at prøve at læse de 3 værdier fra markøren, skal du blot hardkode værdierne igen, mens du udskriver dem.

Så faktisk, hvis du virkelig er ligeglad med at læse de 3 værdier fra markøren, skal du bare fjerne dem fra forespørgslen helt. Ellers skal du erstatte dine hårdkodede værdier fra din DBMS_OUTPUT.PUT_LINE(...) med de aliaser, du har angivet.

Så når din forespørgsel er rettet, i stedet for:

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

Du skal nok bruge markøren sådan her:

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


  1. Ryd data i MySQL-tabel med PHP?

  2. Hvordan overvåger man SQL Server-tabelændringer ved hjælp af c#?

  3. Hvordan opdaterer man data fra datatable til sql table?

  4. Hvordan forbinder man Android med Oracle-databasen?