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ụngORDER BY
mệnh đề trong một truy vấn con. KhiORDER 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 4944718ORDER 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 ...)