Jika Anda mendapatkan kesalahan "ORA-01789:blok kueri memiliki jumlah kolom hasil yang salah" di Oracle Database, maka itu mungkin karena Anda mencoba menggunakan operator seperti UNION
, INTERSECT
, atau EXCEPT
untuk menjalankan kueri gabungan, tetapi SELECT
pernyataan di kedua sisi operator mengembalikan jumlah kolom yang berbeda.
Untuk memperbaikinya, cukup pastikan bahwa kedua kueri mengembalikan jumlah kolom yang sama.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
SELECT EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;
Hasil:
ORA-01789: query block has incorrect number of result columns
Di sini, saya menggunakan UNION
operator untuk membuat kueri gabungan. Sayangnya saya mendapatkan kesalahan, karena saya hanya menyertakan satu kolom di kueri pertama, tetapi dua kolom di kueri kedua.
Solusi
Cara untuk memperbaiki masalah ini adalah memastikan kedua kueri mengembalikan jumlah kolom yang sama.
Jadi kita bisa menambahkan kolom baru ke SELECT
pertama pernyataan:
SELECT EmployeeId, EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;
Hasil:
EMPLOYEEID | NAMA KARYAWAN |
---|---|
1 | Bart |
1 | Mia |
2 | Jan |
2 | Rohit |
3 | Ava |
3 | Petrus |
4 | Ava |
4 | Rohit |
5 | Senin |
6 | Senin |
7 | Senin |
Atau kita dapat menghapus salah satu kolom dari kueri kedua:
SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;
Hasil:
NAMA KARYAWAN |
---|
Ava |
Bart |
Jan |
Mia |
Senin |
Petrus |
Rohit |
Ingatlah bahwa Anda bisa mendapatkan hasil yang sangat berbeda tergantung pada opsi yang Anda gunakan. Faktanya, kami mendapatkan hasil yang berbeda dalam contoh kami di atas.
Ini karena UNION
operator mengembalikan baris yang berbeda kecuali jika ditambahkan dengan ALL
kata kunci. Saat kami menyertakan kolom “ID”, ini membuat beberapa baris berbeda ketika tidak akan ada jika kami hanya mengembalikan kolom “nama”. Kemudian ketika kami mengecualikan kolom “ID”, kami mendapatkan nilai unik dari kolom “nama”.
Jika Anda benar-benar ingin nilai duplikat dikembalikan, Anda dapat menggunakan ALL
kata kunci.
Oleh karena itu, kita dapat memodifikasi contoh terakhir kita sebagai berikut:
SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;
Hasil:
NAMA KARYAWAN |
---|
Bart |
Jan |
Ava |
Rohit |
Senin |
Senin |
Senin |
Mia |
Rohit |
Petrus |
Ava |
Senin |
Senin |