【问题标题】:How to insert the comma separated value in table如何在表格中插入逗号分隔值
【发布时间】:2011-10-10 10:48:14
【问题描述】:

我有一张这样的桌子:

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

我想创建一个这样的表:

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

如何在 PLSQL 中做到这一点?

【问题讨论】:

  • 每次将 CSV 数据放入关系数据库表列时,都会杀死一只小猫

标签: oracle csv size varray


【解决方案1】:
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 有不同数量的逗号等,它很脆弱并且可能会中断。

【讨论】:

    【解决方案2】:

    很久以前,我为这种需求编写了一个自定义函数。我正在开发一个通常希望在数据库中存储逗号分隔值的应用程序。我必须创建一个函数来选择它,就好像它是一个表格和一个相反的函数,这样应用程序才会开心。我似乎找不到最终想出的功能,但我在 Tom 对我在这里提出的问题的回复中写下了它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多