Oracle
 sql >> база данни >  >> RDS >> Oracle

Коригиране на грешка „ORA-01789:блокът на заявката има неправилен брой колони с резултати“

Ако получавате грешката „ORA-01789:блокът на заявката има неправилен брой колони с резултати“ в Oracle Database, това вероятно е защото се опитвате да използвате оператор като UNION , INTERSECT , или EXCEPT за да изпълните съставна заявка, но SELECT операторите от двете страни на оператора връщат различен брой колони.

За да коригирате това, просто се уверете, че и двете заявки връщат един и същ брой колони.

Пример за грешка

Ето пример за код, който създава грешката:

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

Резултат:

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

Тук използвам UNION оператор за създаване на съставна заявка. За съжаление получавам грешка, защото включих само една колона в първата заявка, но две колони във втората.

Решение

Начинът за отстраняване на този проблем е да се уверите, че и двете заявки връщат същия брой колони.

Така че можем да добавим нова колона към първия SELECT изявление:

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

Резултат:

ИД НА СЛУЖИТЕЛ EMPLOYEENAME
1 Барт
1 Миа
2 Януари
2 Рохит
3 Ава
3 Петър
4 Ава
4 Рохит
5 Мониш
6 Мониш
7 Мониш

Или можем да премахнем една от колоните от втората заявка:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Резултат:

EMPLOYEENAME
Ава
Барт
Януари
Миа
Мониш
Петър
Рохит

Имайте предвид, че можете да получите значително различни резултати в зависимост от опцията, която използвате. Всъщност в нашия пример по-горе получихме различни резултати.

Това е така, защото UNION операторът връща отделни редове, освен ако не е добавен с ALL ключова дума. Когато включихме колоните „ID“, това направи някои редове различни, когато те не биха били, ако върнахме само колоните „name“. След това, когато изключихме колоните „ID“, получихме уникалните стойности от колоните „name“.

Ако наистина искате да се върнат дублирани стойности, можете да използвате ALL ключова дума.

Следователно можем да модифицираме последния ни пример, както следва:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Резултат:

EMPLOYEENAME
Барт
Януари
Ава
Рохит
Мониш
Мониш
Мониш
Миа
Рохит
Петър
Ава
Мониш
Мониш

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.sql.SQLException:I/O грешка:нулиране на връзката в linux сървър

  2. Java - Как да извика процедура на Oracle с персонализирани типове?

  3. Необходимо ли е да изхвърлите DbCommand след употреба?

  4. ORA-38868

  5. Използване на изглед без първичен ключ с Entity