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.