Oracle에 여러 행 삽입
Oracle에 여러 행을 삽입하는 방법에 대한 논의에서 두 가지 접근 방식이 시연되었습니다.
첫 번째:
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
두 번째:
INSERT ALL
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
INTO t (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
INTO t (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
.
.
.
SELECT 1 FROM DUAL;
누가 다른 것보다 하나를 사용하는 것을 선호한다고 주장할 수 있습니까?
추신: 제가 직접 조사를 한 것은 아니기 때문에(심지어 설명 계획까지) 어떤 정보나 의견이라도 감사하겠습니다.
감사해요.
성능 측면에서 보면 이러한 쿼리는 동일합니다.
UNION ALL
성능에 영향을 미치지 않을 것입니다.Oracle
추정치:UNION
'ed 쿼리는 필요할 때만 쿼리하고 결과를 먼저 캐시하지 않습니다.
SELECT
구문은 그런 점에서 더 유연해서 당신이 더 쉽게 조작할 수 있습니다.SELECT
변경할 항목이 있는지 쿼리합니다.
예를 들어, 이 쿼리는 다음과 같습니다.
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
로 다시 쓸 수 있습니다.
INSERT
INTO pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
SELECT 7999 + level, 0, 'Multi ' || 7999 + level, 1
FROM dual
CONNECT BY
level <= 2
대체함으로써2
적절한 숫자를 사용하면 원하는 수의 행을 얻을 수 있습니다.
의 경우INSERT ALL
대상 테이블 설명을 복제해야 합니다. 예를 들어, 다음과 같은 경우에는 읽기가 더 어렵습니다.40
행
그INSERT ALL
메서드에서 테이블에 더 많은 행을 삽입하는 데 문제가 있습니다.
최근에 SQL 문이 하나 있는 테이블에 1130개의 행을 삽입하려고 했습니다.제가 이걸 하려고 했을 때.INSERT ALL
method 다음 오류가 발생했습니다.
ORA-24335 - 1000개 이상의 열을 지원할 수 없습니다.
사용한 경우INSERT INTO .. UNION ALL ..
모든 것이 잘 되어 갔습니다.
Btw. 저는 이 토론을 발견하기 전까지 UNION ALL 방법에 대해 몰랐습니다 :)
저는 솔루션 1이 작동하는 약간의 해킹이며 Insert ALL의 설계된 대안보다 효율성이 낮을 것이라고 생각합니다.
모두 삽입은 선택한 결과로 여러 행을 하나 이상의 테이블에 삽입할 수 있도록 설계되었습니다. 예를 들어, 다음과 같습니다.
Insert ALL
into
t1 (c1, c2) values (q1, q2)
t2 (x1, x2) values (q1, q3)
select q1, q2, q3 from t3
수천 개의 행을 로드하고 싶지만 아직 데이터베이스에 없는 경우에는 이 방법이 최선의 방법이라고 생각하지 않습니다. 데이터가 파일에 있는 경우에는 외부 테이블이나 SQL Loader를 통해 행을 효율적으로 삽입할 수 있습니다.
나는 약간의 테스트를 시도했고 더 빠른 해결책은
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
300개 <-> 400개 행 사이의 버퍼링(odbc로 시도했는데, 이 값은 구성에 따라 달라질 수 있음)
다음을 이용한 진술서UNION ALL
삽입이 발생하기 전에 모든 문의 결과를 결합해야 하기 때문에 이론적으로 작은 성능 단점이 있습니다.INSERT ALL
최종 결과는 이미 라인별로 처리될 수 있으므로 이러한 단점은 없습니다.
그러나 실질적으로 Oracle 내부의 최적화 도구는 이러한 차이를 무시할 수 있도록 해야 하며 어떤 방식을 선택할지는 사용자의 선호도에 달려 있습니다.
내 생각에 그것은.INSERT ALL
이 더 잘 수 있는 은 두가지중더잘것은있읽는수을간이인에서▁the▁is-▁the?은▁human▁while것▁better?UNION ALL
변형은 이러한 삽입이 자동으로 생성될 때 더 적은 공간을 차지하는 변형입니다.
1000보다 큰 insert 문이 있으면 모든 insert 문을 .sql 파일에 넣고 Toad 또는 SQL Developer에서 연 다음 실행합니다.모든 레코드가 삽입됩니다.
배열-삽입을 고려해야 합니다.
- 간편한 SQL
- 어레이 매개 변수를 설정하려면 클라이언트 측 코딩이 필요합니다.
이것은 수백 개의 삽입을 일괄적으로 수행해야 할 경우 네트워크 트래픽을 최소화하는 방법입니다.
언급URL : https://stackoverflow.com/questions/883706/inserting-multiple-rows-into-oracle
'programing' 카테고리의 다른 글
이 문제를 해결하기 위해 복잡한 선택 쿼리가 있습니까? (0) | 2023.07.30 |
---|---|
두 줄의 텍스트 오버플로 줄임표 (0) | 2023.07.30 |
Oracle Jinitator 버전이 너무 낮음 (0) | 2023.07.30 |
Angular 5의 헤더에 CORS 요청을 추가하는 방법 (0) | 2023.07.30 |
오라클 데이터베이스의 디코딩 기능 (0) | 2023.07.30 |