문자열로 아이템 목록을 전달하여 테이블에 저정해야 하는 상황이 종종 있습니다.
,(콤마) 나 |(파이프문자)로 구분된 문자열을 던져 While 안에서 instr + left 의 조합으로 파싱하여
테이블에 insert 하는 방법이 있지만 구닥다리 에 성능도 좋지 않다.
mssql 이나 oracle 에서는 xml 문자열을 파싱할 수 있는 함수가 있는데 이를 이용하면 손쉽게 테이블에 insert 할 수 있다.
* xml을 사용하면 태그 문자가 붙어 문자열이 길어져 성능상 안좋다고 하는 사람들이 있을 수 있는데. 그런 사람들은 꼭~ 피해 다니길 당부 드린다.
먼저 아이템 목록이 담긴 xml 문자열 입니다.
"<items> <item><id>M4A1</id><price>500</price></item> <item><id>AK47</id><price>600</price></item> <item><id>9A-91</id><price>700</price></item> <item><id>M4</id><price>700</price></item> </items>" |
Oracle SP 입니다.
PROCEDURE SP_XML_SAVE ( i_xml VARCHAR2 ) IS BEGIN
INSERT INTO T_ITEMS(ID,PRICE) SELECT EXTRACTVALUE ( column_value, '/item/id' ) id --item 하위 id 속성의 값을 가져옴 ,to_number(EXTRACTVALUE ( column_value, '/item/price' )) price --값 추출 후 숫자형으로 변환 FROM TABLE ( XMLSEQUENCE ( EXTRACT ( xmltype ( i_xml ), '/items/item' ) ) ) p; --items 하위 item 목록 집합을 추출
END SP_XML_SAVE; |
SP 테스트 입니다.
DECLARE I_XML VARCHAR2(2000); BEGIN I_XML := '<items> <item><id>M4A1</id><price>500</price></item> <item><id>AK47</id><price>600</price></item> <item><id>9A-91</id><price>700</price></item> </items>'; PKG_SUB.SP_XML_SAVE(I_XML => I_XML); END; |
결과:
xml 문자열로 입력받은 아이템 목록이 테이블에 잘 저장되어 있습니다.
위 내용은 ORACLE SQL Developer 에서 작성 및 테스트 되었습니다.
기타 궁금한 사항, 논의해 보고 싶으신 사항은 댓글 남겨 주세요. 언제나 환영 합니다.
'Database & Data > ORACLE' 카테고리의 다른 글
하나의 테이블에서 Merge Into 실행 (0) | 2020.03.21 |
---|---|
Oracle 문자열을 파싱하여 테이블 구조로 변환 (0) | 2018.07.13 |