2011-10-10 72 views
0

逗號分隔值我有一個這樣的表:如何插入表

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

我想創建這樣一個表:

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

我怎樣才能做到這一點在PLSQL?

+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