私はそのようなテーブルを持っています:
columnId1 => "word1,word2,word3"
columnId3 => "word4,word5,word6"
そのようなテーブルを作成したい:
columnId1 word1
columnId1 word2
columnId1 word3
columnId2 word4
columnId2 word5
columnId2 word6
PLSQLでそれを行うにはどうすればよいですか?
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のコンマの量が異なる場合などに破損する可能性があることに注意してください。
かなり前に、この種のニーズに対応するカスタム関数を作成しました。私は、定期的にコンマ区切りの値をデータベースに保存したいアプリケーションに取り組んでいました。アプリケーションが満足できるように、テーブルであるかのように選択する関数とその逆の関数を作成する必要がありました。最終的に思いついた関数を見つけることができないようですが、ここで尋ねた質問に対するトムからの応答を書き留めました。
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2189860818012#28667254837962