Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Perbaiki Kesalahan "ORA-01790:ekspresi harus memiliki tipe data yang sama dengan ekspresi yang sesuai"

Jika Anda mendapatkan kesalahan "ORA-01790:ekspresi harus memiliki tipe data yang sama dengan ekspresi yang sesuai" di Oracle Database, itu mungkin karena Anda menggunakan operator seperti UNION , INTERSECT , atau EXCEPT untuk menjalankan kueri gabungan, tetapi kolom yang dikembalikan oleh setiap kueri menggunakan grup tipe data yang berbeda.

Untuk memperbaiki masalah ini, Anda harus memastikan bahwa setiap kolom yang dikembalikan oleh kueri kedua menggunakan grup tipe data yang sama dengan kolom yang sesuai di kueri pertama.

Contoh Kesalahan

Berikut adalah contoh kode yang menghasilkan kesalahan ini:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Hasil:

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

Masalahnya di sini, adalah saya mencoba menggabungkan TeacherName kolom di kueri pertama, dengan StudentId kolom di kueri kedua.

Dalam kasus saya, TeacherName kolom adalah varchar(50) kolom tetapi StudentId kolom adalah int kolom. Ini menyebabkan kesalahan terjadi.

Solusi 1

Solusi pertama (dan mungkin paling umum) untuk kesalahan di atas adalah memastikan bahwa kami memiliki kolom yang benar di setiap kueri.

Dalam kasus saya, tampaknya cukup jelas bahwa saya melewati kolom yang salah. Oleh karena itu, saya dapat mengubah kueri di atas sebagai berikut:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Hasil:

NAMA GURU
Ben
Tagihan
Cathy
Ein
Faye
Jet
Spike
Warren

Atau saya bisa melakukan hal berikut:

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

Hasil:

TEACHERID NAMA GURU
1 Faye
1 Warren
2 Ben
2 Jet
3 Cathy
3 Lonjakan
4 Cathy
4 Ein
5 Tagihan
5 Warren
6 Tagihan

Dalam kedua kasus, jenis kolom yang dikembalikan oleh kueri kedua cocok dengan jenis yang dikembalikan oleh kueri pertama.

Solusi 2

Dalam beberapa kasus, Anda mungkin menemukan bahwa Anda memiliki kolom yang benar, tetapi jenisnya tidak cocok. Dalam kasus seperti itu, Anda mungkin perlu mengonversi salah satu kolom ke tipe data yang berbeda.

Menggunakan contoh kita, kita bisa melakukan ini:

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

Hasil:

NAMA GURU
1
2
3
4
5
6
Ben
Tagihan
Cathy
Warren

Ini mungkin bukan contoh terbaik, karena menggabungkan nama dengan ID, tapi saya yakin Anda mengerti. Kami dapat menghindari kesalahan dengan menggunakan TO_CHAR(number) berfungsi untuk mengonversi StudentId kolom ke char ketik.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proses peningkatan langkah demi langkah untuk R12.2 Upgrade Bagian -4 (Menerapkan Paket Pembaruan Rilis 12.2.x)

  2. Hal-hal yang harus Anda ketahui tentang Tabel FND_LOBS di Aplikasi Oracle

  3. Urutan Oracle tetapi kemudian di MS SQL Server

  4. Bagaimana menghubungkan ke database Oracle 11g dari jarak jauh

  5. Menginstal Oracle Fusion Middleware / WebLogic Server 11g