source

ORA-00907 오른쪽 괄호 없음 문제 - 내부 삽입 쿼리 순서로 선택

nicesource 2023. 8. 27. 09:40
반응형

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

반응형