2011-10-10 4 views
0

의 쉼표로 구분 된 값을 삽입 :어떻게 그런 테이블이 테이블

columnId1 word1 
columnId1 word2 
columnId1 word3 
columnId2 word4 
columnId2 word5 
columnId2 word6 

가 어떻게 그것이 PLSQL에서 할 수있는 : 그와 같은 테이블을 만들

columnId1 => "word1,word2,word3" 
columnId3 => "word4,word5,word6" 

를?

+5

당신이에 CSV 데이터를 넣어 관계형 데이터베이스 테이블 열 – Phil

답변

2
create table testtable(col1 varchar2(50) , col2 varchar2(50)); 

insert into testtable (col1, col2) 
with commadata as(
select 'word1,word2,word3' columnid1, 'word4,word5,word6' columnid2 
    from dual 
) 
select  regexp_substr(columnid1 
          , '[^,]+' 
          ,1 
          ,level) as parsed_value 
          , 
regexp_substr(columnid2 
          , '[^,]+' 
          ,1 
          ,level) as parsed_value       

    from commadata 
connect by level <= REGEXP_COUNT(columnid1 , '[,]')+1  
; 
select * from testtable; 

COL1            COL2            
-------------------------------------------------- -------------------------------------------------- 
word1            word4            
word2            word5            
word3            word6 

이것은 10g을 사용하고 있고 정규 표현식에 액세스 할 수 있다고 가정합니다. 이것은 진술을 작성하기에 충분할 것입니다.주의해야 할 것은 그것이 부서지기 때문이며 columnId1과 columnId2가 다른 양의 쉼표를 가지면 깨질 수 있다는 것입니다.

1

얼마 전에 필자는 이러한 종류의 필요성을 충족시키기 위해 사용자 지정 함수를 작성했습니다. 필자는 일상적으로 쉼표로 구분 된 값을 데이터베이스에 저장하려는 응용 프로그램에서 작업하고있었습니다. 응용 프로그램이 행복해 지도록 역순으로 테이블과 함수 인 것처럼 그것을 선택하는 함수를 만들어야했습니다. 내가 궁극적으로 내놓았다 기능을 찾을 수가 없어하지만 난 여기 물었다 질문에 톰의 응답을 해제 썼다 : 새끼 고양이가 때마다 살해

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2189860818012#28667254837962

관련 문제