sql >> Database >  >> RDS >> Oracle

Fix Error "ORA-01789:queryblok heeft een onjuist aantal resultaatkolommen"

Als u de foutmelding "ORA-01789:queryblok heeft onjuist aantal resultaatkolommen" krijgt in Oracle Database, komt dit waarschijnlijk omdat u een operator zoals UNION probeert te gebruiken , INTERSECT , of EXCEPT om een ​​samengestelde query uit te voeren, maar de SELECT uitspraken aan weerszijden van de operator leveren een ander aantal kolommen op.

Om dit op te lossen, moet u ervoor zorgen dat beide zoekopdrachten hetzelfde aantal kolommen retourneren.

Voorbeeld van fout

Hier is een voorbeeld van code die de fout veroorzaakt:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;

Resultaat:

ORA-01789: query block has incorrect number of result columns

Hier gebruik ik de UNION operator om een ​​samengestelde query te maken. Helaas krijg ik een foutmelding, omdat ik slechts één kolom in de eerste query heb opgenomen, maar twee kolommen in de tweede.

Oplossing

De manier om dit probleem op te lossen, is ervoor te zorgen dat beide query's hetzelfde aantal kolommen retourneren.

We kunnen dus ofwel een nieuwe kolom toevoegen aan de eerste SELECT verklaring:

SELECT EmployeeId, EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;

Resultaat:

WERKNEMER-ID NAAM WERKNEMER
1 Bart
1 Mia
2 Jan
2 Rohit
3 Ava
3 Peter
4 Ava
4 Rohit
5 Monish
6 Monish
7 Monish

Of we kunnen een van de kolommen uit de tweede zoekopdracht verwijderen:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Resultaat:

NAAM WERKNEMER
Ava
Bart
Jan
Mia
Monish
Peter
Rohit

Houd er rekening mee dat u enorm verschillende resultaten kunt krijgen, afhankelijk van de optie die u gebruikt. In ons voorbeeld hierboven kregen we zelfs verschillende resultaten.

Dit komt omdat de UNION operator geeft verschillende rijen terug, tenzij deze is toegevoegd met de ALL trefwoord. Toen we de "ID"-kolommen invoegden, maakte dit sommige rijen duidelijk wanneer ze niet zouden zijn geweest als we alleen de "naam" -kolommen hadden geretourneerd. Toen we de "ID"-kolommen uitsloten, kregen we de unieke waarden van de "naam" -kolommen.

Als u dubbele waarden wilt retourneren, kunt u de ALL . gebruiken zoekwoord.

Daarom kunnen we ons laatste voorbeeld als volgt aanpassen:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Resultaat:

NAAM WERKNEMER
Bart
Jan
Ava
Rohit
Monish
Monish
Monish
Mia
Rohit
Peter
Ava
Monish
Monish

  1. Is er een Max-functie in SQL Server die twee waarden aanneemt, zoals Math.Max ​​in .NET?

  2. RazorSQL verbinden met Salesforce.com

  3. Oracle naar PostgreSQL — Cursors en algemene tabeluitdrukkingen

  4. Geen geldige maand tijdens het invoegen van gegevens in oracle