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

Коригиране на грешка „ORA-01790:изразът трябва да има същия тип данни като съответния израз“

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

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

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

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

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Резултат:

ORA-01790: expression must have same datatype as corresponding expression

Проблемът тук е, че се опитвам да комбинирам TeacherName колона в първата заявка с StudentId колона във втората заявка.

В моя случай TeacherName колоната е varchar(50) колона, но StudentId колоната е int колона. Това води до възникване на грешката.

Решение 1

Първото (и вероятно най-често срещаното) решение на горната грешка е да се гарантира, че имаме правилната колона/и във всяка заявка.

В моя случай изглежда съвсем очевидно, че съм подминал грешните колони. Следователно мога да променя горната заявка, както следва:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Резултат:

TEACHERNAME
Бен
Сметка
Кати
Ейн
Фей
Реактивен
Спайк
Уорън

Или мога да направя следното:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Резултат:

TEACHERID TEACHERNAME
1 Фей
1 Уорън
2 Бен
2 Реактивен
3 Кати
3 Спайк
4 Кати
4 Ейн
5 Сметка
5 Уорън
6 Сметка

И в двата случая типовете колони, върнати от втората заявка, съвпадат с типовете, върнати от първата заявка.

Решение 2

В някои случаи може да откриете, че имате правилните колони, но техните типове не съвпадат. В такива случаи може да се наложи да преобразувате една от колоните в различен тип данни.

Използвайки нашия пример, бихме могли да направим това:

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Резултат:

TEACHERNAME
1
2
3
4
5
6
Бен
Сметка
Кати
Уорън

Това вероятно не е най-добрият пример, тъй като комбинира имена с идентификационни номера, но съм сигурен, че разбирате картината. Успяхме да избегнем грешката, като използвахме TO_CHAR(number) функция за преобразуване на StudentId колона към char тип.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво представлява Oracle SQL и PL/SQL? Всичко, което един начинаещ трябва да знае

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

  3. Сливане на два реда в един, като се заменят нулеви стойности

  4. Oracle UTL_SMTP:Изпращане на поща с пример за прикачен файл с помощта на удостоверяване на Oracle Wallet

  5. вграждане на изображение в html имейл