반응형
ORA-00907 오른쪽 괄호 없음 문제 - 내부 삽입 쿼리 순서로 선택
표에 삽입하려고 하는데 하나의 열에 하나의 선택 문을 사용합니다.아래는 제 질문에 대한 예시입니다.
INSERT INTO MY_TBL (MY_COL1, MY_COL2)
VALUES (
(SELECT DATA FROM FIR_TABL WHERE ID = 1 AND ROWNUM = 1 ORDER BY CREATED_ON DESC),
1
);
던집니다.ORA-00907 Missing right Parenthesis제거할 경우ORDER BY이것으로부터, 그것은 예상대로 작동합니다.하지만 주문해야 합니다.어떻게 고칠 수 있습니까?
현재의 두 답변 모두 다음을 사용한다는 사실을 무시합니다.order by그리고.rownum같은 질문을 하는 것은 본질적으로 위험합니다.당신이 원하는 데이터를 얻을 수 있다는 보장은 절대 없습니다.순서가 지정된 쿼리의 첫 번째 행을 사용하려면 다음과 같은 하위 쿼리를 사용해야 합니다.
insert into my_tbl ( col1, col2 )
select data, 'more data'
from ( select data
from fir_tabl
where id = 1
order by created_on desc )
where rownum = 1
;
두 개가 있는 경우에도 원하는 방법으로 데이터를 정렬하는 등의 기능을 사용할 수 있습니다.created_on동일한 날짜를 사용하면 2개의 값으로 끝날 수 있습니다.rnk = 1.
insert into my_tbl ( col1, col2 )
select data, 'more data'
from ( select data
, rank() over ( order by created_on desc ) as rnk
from fir_tabl
where id = 1)
where rnk = 1
;
를 사용하지 않습니다.SELECT사용 시VALUES키워드대신 사용:
INSERT INTO MY_TBL (MY_COL)
SELECT DATA FROM FIR_TABL WHERE ID = 1 ORDER BY CREATED_ON DESC
;
편집한 쿼리는 다음과 같습니다.
INSERT INTO MY_TBL (MY_COL1, MY_COL2)
SELECT DATA, 1 FROM FIR_TABL WHERE ID = 1 AND ROWNUM = 1 ORDER BY CREATED_ON DESC
;
저는 데이터를 삽입할 때가 아니라 데이터를 추출할 때 주문을 해야 한다는 것에 동의합니다.
그러나 전체 SELECT를 다른 SELECT로 캡슐화할 때 INSERT에서 ORDER BY 절을 분리할 수 있습니다.
이렇게 하면 오류를 방지할 수 있습니다.
INSERT INTO MY_TABLE (
SELECT * FROM (
SELECT columns
FROM table
ORDER BY clause
)
)
언급URL : https://stackoverflow.com/questions/9175749/ora-00907-missing-right-parenthesis-issue-select-with-order-by-inside-insert-q
반응형
'source' 카테고리의 다른 글
| 파워셸에서 윈도우 프로세스용 도커를 다시 시작하는 방법은 무엇입니까? (0) | 2023.08.27 |
|---|---|
| iPhone/iPad 브라우저 시뮬레이터? (0) | 2023.08.27 |
| 작동 중인 중단된 쿼리의 수수께끼 (0) | 2023.08.27 |
| C에서 구조물에 메모리 할당 (0) | 2023.08.27 |
| MySQL의 쿼리에서 반환된 각 행에 대한 쿼리 호출 (0) | 2023.08.27 |