기본적으로 오라클에서 INSERT ALL 을 제공해준다.
- INSERT ALL 예제 (출처: http://302.pe.kr/349 )
Insert All
- Oracle 9i 이상에서 지원.
- Multitable insert는 한개의 테이블에 여러 row를 넣거나, 여러개의 테이블에 데이터를 한 insert 명령으로 넣을 수 있습니다. 이전 버전에서는 이런 기능은 PL/SQL로 구현을 해야 했으나 9i 이후로는 한 명령으로 수행할 수 있습니다.
-- Unconditional insert into ALL tables
INSERT ALL
INTO sal_history VALUES(empid,hiredate,sal)
INTO mgr_history VALUES(empid,mgr,sysdate)
SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
FROM employees WHERE employee_id > 200;
-- Pivoting insert to split non-relational data
INSERT ALL
INTO Sales_info VALUES (employee_id,week_id,sales_MON)
INTO Sales_info VALUES (employee_id,week_id,sales_TUE)
INTO Sales_info VALUES (employee_id,week_id,sales_WED)
INTO Sales_info VALUES (employee_id,week_id,sales_THUR)
INTO Sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM Sales_source_data;
이 INSERT ALL 을 iBatis에서 적용해 볼 수 있다.
(출처: http://baeksupervisor.tistory.com/23)
단일 insert 할 때는 dao 단에서 map 을 통해 혹은 자바빈을 통해 인자를 넘겼다면
다중 insert 를 ibatis 에서 한번에 하려면. map 혹은 자바빈을 list 에 담아서 보내주면 된다.
당연히 list 의 각 row 에 해당하는 빈의 속성은 모든 row 가 동일해야 한다.
INSERT ALL SELECT * FROM DUAL INTO FILE_ATTACH ( BOARD_ID ,BOARD_DETAIL_ID ,FILE_SEQ_NUM ,FILE_NAME_ORG ,FILE_NAME_REAL ,FILE_SIZE ,FILE_DATE ,FILE_PATH ) VALUES ( #[].board_id# ,#[].board_detail_id# ,#[].file_seq_num# ,#[].file_name_org# ,#[].file_name_real# ,#[].file_size# ,TO_CHAR(SYSDATE, 'YYYY-MM-DD') ,#[].file_path# )
그렇다면..
dao 단에서 트랜잭션을 통해 query 를 row 만큼 호출하는 것이 효율적일까..
아니면 iterator 를 통해 query 는 한번만 호출하는 것이 효율적일까...
- iBatis List 형태 파라미터 insert List<Object>
오라클에는 여러개의 값을 한번에 insert하기 위해서 쓰는 multi insert구문이 있습니다.
[쿼리 구문]
pid NUMBER(5),
fname VARCHAR2(20),
lname VARCHAR2(25));
INSERT ALL
INTO t (pid, fname, lname)
VALUES (1, 'Dan', 'Morgan')
INTO t (pid, fname, lname)
VALUES (2, 'Jeremiah', 'Wilton')
INTO t (pid, fname, lname)
VALUES (3, 'Helen', 'Lofstrom')
SELECT * FROM dual;
- 또다른 예제 MyBatis
출처: http://stackoverflow.com/questions/17563463/mybatis-insert-list-values
Configure your logging system to print out the generated Queries, then try to execute them to your DB directly. In your case, the expected query SHOULD be
as far as I can remember that is not valid. See this answer on how to | |||
Mapper.xml
This is how the query should be there in Mapper xml |
'Framework > MyBatis' 카테고리의 다른 글
DB 컬럼명을 자바 프로퍼티명으로 자동 매핑 시키기 (0) | 2018.09.02 |
---|---|
[MyBatis-동적 SQL] 참조 링크, iBatis List 형태 파라미터 insert List<Object> (0) | 2013.09.22 |