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

ORDER BY với truy vấn bên trong, đưa ra ORA-00907 bị thiếu dấu ngoặc đơn bên phải

Phong cách mã hóa và các dấu ngoặc lồng nhau không cần thiết làm cho điều này thực sự khó đọc và diễn giải. Nhưng nó cũng giúp ích cho điều đó, trái ngược với một số nhận xét, ORA-00907 không phải lúc nào cũng có nghĩa là số lượng dấu ngoặc đơn không đồng đều, nó có thể chỉ ra một lỗi cú pháp chung hơn khiến trình phân tích cú pháp phải cứu. Trong trường hợp này, nó không hữu ích lắm.

Vấn đề là order by ở dòng áp chót, trong truy vấn con mà bạn đang so sánh với in :

...
AND RUN.RN_RUN_ID in(Select max(RUN.RN_RUN_ID) From (((((((RELEASES JOIN RELEASE_CYCLES
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965
ORDER BY TESTCYCL.TC_TESTCYCL_ID)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

Thứ tự cuối cùng rõ ràng là được phép, nhưng trong truy vấn con đó thì không. Vì vậy, nó sẽ kết thúc:

...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

Tôi không thể kiểm tra điều đó vì tôi không có giản đồ của bạn, nhưng một bản trình diễn đơn giản hơn có thể giúp chứng minh:

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
  order by d2.dummy
)
order by d1.dummy;

Error at Command Line : 6 Column : 3
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"

Xóa đơn đặt hàng order by :

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
)
order by d1.dummy;

DUMMY
-----
X     

Nó đang mong đợi để thấy một ) thay vì order by , vì vậy lỗi có ý nghĩa gì đó, một khi bạn biết nó sai; nhưng nó không thực sự giúp bạn thu hẹp nó.

Ngẫu nhiên, điều này được tham chiếu trong tài liệu hỗ trợ của Oracle 731577.1:

Lấy ORA-00907: missing right parenthesis khi sử dụng ORDER BY mệnh đề trong một truy vấn con. Khi ORDER BY mệnh đề bị loại bỏ, truy vấn chạy mà không có lỗi.

...
Đây là hành vi được mong đợi cho mỗi Lỗi 4944718 ORDER BY trong một truy vấn con sẽ không hoạt động, vì thứ tự của các hàng được chuyển đến truy vấn bên ngoài và không có tác động.

Nó được cho phép / bỏ qua trong dạng xem nội tuyến, nhưng không được phép trong một truy vấn con lồng nhau. (Mặc dù có thể có ngoại lệ mà nó vẫn không báo lỗ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. REGEXP_COUNT () Hàm trong Oracle

  2. Tương đương với các bảng bên ngoài Oracle trong SQL Server

  3. Tại sao tôi không thể thực hiện với x as (...) với ADODB và Oracle?

  4. Tạo trình xử lý ghi nhật ký để kết nối với Oracle?

  5. Cách tạo dấu vết FRD trong Oracle Apps 11i / R12