Как вставить запятую в таблицу
У меня есть такая таблица:
columnId1 => "word1,word2,word3"
columnId3 => "word4,word5,word6"
Я хочу создать такую таблицу:
columnId1 word1
columnId1 word2
columnId1 word3
columnId2 word4
columnId2 word5
columnId2 word6
Как я могу сделать это в PLSQL?
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 имеют разное количество запятых и тому подобное.
Некоторое время назад я написал специальную функцию для такого рода нужд. Я работал над приложением, которое обычно хотело бы хранить значения через запятую в базе данных. Мне нужно было создать функцию, чтобы выделить ее, как если бы это была таблица, и функцию для обратного, чтобы приложение было счастливым. Кажется, я не могу найти функцию, с которой в конечном итоге придумала, но я списала ее с ответа Тома на вопрос, который я задала здесь:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2189860818012