Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sửa lỗi “ORA-01790:biểu thức phải có cùng kiểu dữ liệu với biểu thức tương ứng”

Nếu bạn gặp lỗi “ORA-01790:biểu thức phải có cùng kiểu dữ liệu với biểu thức tương ứng” trong Cơ sở dữ liệu Oracle, có thể là do bạn đang sử dụng một toán tử chẳng hạn như UNION , INTERSECT hoặc EXCEPT để chạy một truy vấn kết hợp, nhưng các cột được trả về bởi mỗi truy vấn sử dụng các nhóm kiểu dữ liệu khác nhau.

Để khắc phục sự cố này, bạn cần đảm bảo rằng mỗi cột được trả về bởi truy vấn thứ hai sử dụng cùng một nhóm kiểu dữ liệu với cột tương ứng trong truy vấn đầu tiên.

Ví dụ về Lỗi

Dưới đây là một ví dụ về mã tạo ra lỗi này:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Kết quả:

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

Vấn đề ở đây là tôi đang cố gắng kết hợp TeacherName trong truy vấn đầu tiên, với StudentId trong truy vấn thứ hai.

Trong trường hợp của tôi, TeacherName cột là một varchar(50) trừ cột StudentId cột là một int cột. Điều này gây ra lỗi.

Giải pháp 1

Giải pháp đầu tiên (và có lẽ là phổ biến nhất) cho lỗi trên là đảm bảo rằng chúng ta có đúng cột / s trong mỗi truy vấn.

Trong trường hợp của tôi, có vẻ như tôi đã vượt qua các cột sai. Do đó, tôi có thể sửa đổi truy vấn trên như sau:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Kết quả:

EDERNAME
Ben
Hóa đơn
Cathy
Ein
Faye
Máy bay phản lực
Spike
Warren

Hoặc tôi có thể làm như sau:

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

Kết quả:

GIÁO VIÊN GIẢNG VIÊN
1 Faye
1 Warren
2 Ben
2 Máy bay phản lực
3 Cathy
3 Spike
4 Cathy
4 Ein
5 Hóa đơn
5 Warren
6 Hóa đơn

Trong cả hai trường hợp, các loại cột được trả về bởi truy vấn thứ hai khớp với các loại được trả về bởi truy vấn đầu tiên.

Giải pháp 2

Trong một số trường hợp, bạn có thể thấy rằng bạn đã có đúng cột, nhưng loại của chúng không khớp. Trong những trường hợp như vậy, bạn có thể cần phải chuyển đổi một trong các cột sang một kiểu dữ liệu khác.

Sử dụng ví dụ của chúng tôi, chúng tôi có thể làm điều này:

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

Kết quả:

EDERNAME
1
2
3
4
5
6
Ben
Hóa đơn
Cathy
Warren

Đây có lẽ không phải là ví dụ tốt nhất vì nó đang kết hợp tên với ID, nhưng tôi chắc chắn rằng bạn sẽ hiểu rõ. Chúng tôi có thể tránh lỗi bằng cách sử dụng TO_CHAR(number) chức năng chuyển đổi StudentId cột thành một char loại.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thời gian chờ truy vấn JDBC của Oracle được thực hiện như thế nào?

  2. Độ trễ của Oracle giữa cam kết và chọn

  3. làm thế nào để chuyển đổi một chuỗi ngày thành định dạng ngày trong oracle10g

  4. Cách kết nối từ xa với cơ sở dữ liệu Oracle 11g

  5. Làm cách nào để bạn chuyển một đối số tới một khối PL / SQL trong một tệp sql được gọi là sử dụng START trong sqlplus?