Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Napraw błąd „ORA-01790:wyrażenie musi mieć ten sam typ danych co odpowiadające wyrażenie”

Jeśli otrzymujesz błąd „ORA-01790:wyrażenie musi mieć ten sam typ danych, co odpowiadające mu wyrażenie” w bazie danych Oracle, to prawdopodobnie dlatego, że używasz operatora takiego jak UNION , INTERSECT lub EXCEPT uruchomić zapytanie złożone, ale kolumny zwracane przez każde zapytanie używają różnych grup typów danych.

Aby rozwiązać ten problem, musisz upewnić się, że każda kolumna zwrócona przez drugie zapytanie używa tej samej grupy typów danych, co odpowiadająca jej kolumna w pierwszym zapytaniu.

Przykład błędu

Oto przykład kodu, który powoduje ten błąd:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Wynik:

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

Problem polega na tym, że próbuję połączyć TeacherName kolumna w pierwszym zapytaniu z StudentId kolumna w drugim zapytaniu.

W moim przypadku TeacherName kolumna to varchar(50) kolumna, ale StudentId kolumna to int kolumna. Powoduje to wystąpienie błędu.

Rozwiązanie 1

Pierwszym (i prawdopodobnie najczęstszym) rozwiązaniem powyższego błędu jest upewnienie się, że w każdym zapytaniu mamy poprawną kolumnę/kolumny.

W moim przypadku wydaje się dość oczywiste, że podałem niewłaściwe kolumny. Dlatego mogę zmodyfikować powyższe zapytanie w następujący sposób:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Wynik:

NAZWISKO NAUCZYCIELA
Ben
Rachunek
Kasia
Ein
Faye
Odrzutowiec
Skok
Warren

Lub mógłbym wykonać następujące czynności:

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

Wynik:

ID NAUCZYCIELA NAZWISKO NAUCZYCIELA
1 Faye
1 Warren
2 Ben
2 Odrzutowiec
3 Kasia
3 Skok
4 Kasia
4 Ein
5 Rachunek
5 Warren
6 Rachunek

W obu przypadkach typy kolumn zwrócone przez drugie zapytanie pasowały do ​​typów zwróconych przez pierwsze zapytanie.

Rozwiązanie 2

W niektórych przypadkach może się okazać, że masz prawidłowe kolumny, ale ich typy nie są zgodne. W takich przypadkach może być konieczne przekonwertowanie jednej z kolumn na inny typ danych.

Korzystając z naszego przykładu, możemy to zrobić:

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

Wynik:

NAZWISKO NAUCZYCIELA
1
2
3
4
5
6
Ben
Rachunek
Kasia
Warren

To prawdopodobnie nie jest najlepszy przykład, ponieważ łączy nazwy z identyfikatorami, ale jestem pewien, że masz zdjęcie. Udało nam się uniknąć błędu, używając TO_CHAR(number) funkcja do konwersji StudentId kolumna na char typ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12516, TNS:listener nie mógł znaleźć dostępnej obsługi

  2. ORA-02287:numer sekwencji jest tutaj niedozwolony

  3. Dodaj parametr daty do zapytania Oracle

  4. Narzędzia do pracy z procedurami składowanymi w Oracle, w zespole?

  5. Zapytanie o sprawdzenie rozmiaru tabeli w bazie danych Oracle