새 테이블의 숫자 열에 대해 증분 값을 생성하면서 Oracle의 한 테이블에서 다른 테이블로 일부 데이터를 복사해야합니다. 이 행은 사소한 수의 행 (100)을 가진 한 번만 수행하는 연습입니다.INSERT SELECT 문에서 증분 숫자 열 값 생성
이 문제에 대한 적절한 해결책이 있지만보다 세련된 방법이 있는지 궁금합니다.
내가 지금처럼, 임시 순서로 일을 해요 :
CREATE SEQUENCE temp_seq
START WITH 1;
INSERT INTO new_table (new_col, copied_col1, copied_col2)
SELECT temp_seq.NEXTVAL, o.*
FROM (SELECT old_col1, old_col2
FROM old_table,
ORDER BY old_col1) o;
DROP SEQUENCE temp_seq;
시퀀스 또는 기타 임시 개체를 만들지 않고 함께 할 수있는 방법이 있나요? 특히, 자체 포함 된 INSERT SELECT 문을 사용하여이 작업을 수행 할 수 있습니까?
방아쇠를 옵션으로 고려하십시오.
추가 정보 : 새 행이 삽입되는 순서를 제어하고 싶습니다. 이전 테이블에서 작성한 순서와 다를 수 있습니다. (위의 ORDER BY 절을 추가했습니다.). 하지만 여전히 새로운 순차 열이 1부터 시작되기를 바랍니다.
비슷한 질문이 있지만 내 질문의 구체적인 내용은 원래대로 생각됩니다.
피터, 추가 된 기준을 참조하십시오. 질문을 추가했습니다. 이 방법은 이전 테이블에서 만들어진 순서대로 행을 삽입하는 것처럼 보이지만 내 주문을 시행하고 싶습니다. 이 요구 사항이 아니라면 방법이 완벽 할 것입니다. 어떤 아이디어? –
@Charles : 내 쿼리는 실제로 행을 정렬하지 않으므로 생성 된 순서대로 삽입됩니다 (그러나 보장되지는 않음). 내 검색어에'ORDER BY '를 적용하려 했습니까? 나는 이것이 작동하기를 기대할 것이다. –
그런 다음 ORDER BY를 select 문에 추가하십시오. 그게 네가 원하는 걸 얻게 해 줄거야. ROWNUM은 단순히 검색된 순서대로 레코드의 시퀀스 번호를 생성합니다. – DCookie