복붙노트

[SQL] ORA-00907은 오른쪽 괄호 문제를 누락 - 내부에 삽입 쿼리에 의해 주문 선택

SQL

ORA-00907은 오른쪽 괄호 문제를 누락 - 내부에 삽입 쿼리에 의해 주문 선택

나는 테이블에 삽입 할 시도하고 그것은 하나 개의 컬럼에 대해 하나의 SELECT 문을 사용합니다. 다음은 내 쿼리의 그림입니다.

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가 발생합니다. 나는이에서 ORDER BY를 제거 할 경우, 예상대로 작동합니다. 그러나 나는 그것을 주문할 필요가있다. 어떻게 그것을 해결할 수 있습니까?

해결법

  1. ==============================

    1.모두 현재의 대답은 동일한 쿼리에 의한 순서와 ROWNUM을 사용하는 것은 본질적으로 위험하다는 사실을 무시합니다. 당신은 당신이 원하는 데이터를 얻을 것이다 절대적으로 보장 할 수 있습니다. 당신이 정렬 된 쿼리의 첫 번째 행을 원하는 경우에 당신은 하위 쿼리를 사용해야합니다 :

    모두 현재의 대답은 동일한 쿼리에 의한 순서와 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
           ;
    

    당신은 당신이 RNK = 1이 개 값으로 끝날 것 동일했다 두 created_on 날짜가 있다면하지만 당신은 또한 당신이 원하는 방법으로 데이터를 주문 계급과 같은 기능을 사용할 수 있습니다.

    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
           ;
    
  2. ==============================

    2.키워드 값을 사용하는 경우는 SELECT를 사용하지 않습니다. 대신 사용 :

    키워드 값을 사용하는 경우는 SELECT를 사용하지 않습니다. 대신 사용 :

    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
    ;
    
  3. ==============================

    3.를 삽입 할 때, 데이터를하지 추출 할 때 그 순서가 수행해야합니다 동의합니다.

    를 삽입 할 때, 데이터를하지 추출 할 때 그 순서가 수행해야합니다 동의합니다.

    그러나 해결 방법으로, 다른 SELECT에 전체 SELECT를 incapsulating 삽입에서 ORDER BY 절을 분리 할 수있다.

    이 오류를 방지 할 수 있습니다 :

    INSERT INTO MY_TABLE (
    SELECT * FROM (
        SELECT columns
        FROM table
        ORDER BY clause
        )
    )
    
  4. from https://stackoverflow.com/questions/9175749/ora-00907-missing-right-parenthesis-issue-select-with-order-by-inside-insert-q by cc-by-sa and MIT license