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

Correzione dell'errore "ORA-01789:il blocco della query ha un numero errato di colonne dei risultati"

Se ricevi l'errore "ORA-01789:il blocco della query ha un numero errato di colonne dei risultati" in Oracle Database, probabilmente è perché stai cercando di utilizzare un operatore come UNION , INTERSECT o EXCEPT per eseguire una query composta, ma il SELECT le istruzioni su entrambi i lati dell'operatore restituiscono un numero diverso di colonne.

Per risolvere questo problema, assicurati semplicemente che entrambe le query restituiscano lo stesso numero di colonne.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

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

Risultato:

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

Qui sto usando UNION operatore per creare una query composta. Sfortunatamente ricevo un errore, perché ho incluso solo una colonna nella prima query, ma due colonne nella seconda.

Soluzione

Il modo per risolvere questo problema è assicurarsi che entrambe le query restituiscano lo stesso numero di colonne.

Quindi possiamo aggiungere una nuova colonna al primo SELECT dichiarazione:

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

Risultato:

ID DIPENDENTE NOME DIPENDENTE
1 Bart
1 Mia
2 gennaio
2 Rohit
3 Ava
3 Pietro
4 Ava
4 Rohit
5 Monish
6 Monish
7 Monish

Oppure potremmo rimuovere una delle colonne dalla seconda query:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Risultato:

DIPENDENTE
Ava
Bart
Gen
Mia
Monish
Pietro
Rohit

Tieni presente che puoi ottenere risultati molto diversi a seconda dell'opzione che utilizzi. In effetti, abbiamo ottenuto risultati diversi nel nostro esempio sopra.

Questo perché il UNION l'operatore restituisce righe distinte a meno che non sia aggiunto il ALL parola chiave. Quando abbiamo incluso le colonne "ID", alcune righe sono state distinte quando non sarebbero state se avessimo restituito solo le colonne "nome". Quindi, quando abbiamo escluso le colonne "ID", abbiamo ottenuto i valori univoci dalle colonne "nome".

Se desideri effettivamente restituire valori duplicati, puoi utilizzare ALL parola chiave.

Pertanto, possiamo modificare il nostro ultimo esempio come segue:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Risultato:

DIPENDENTE
Bart
Gen
Ava
Rohit
Monish
Monish
Monish
Mia
Rohit
Pietro
Ava
Monish
Monish