我面临着用sql加载程序加载文件的问题。
这就是我的输入文件的样子:
#ID; CARD_NUMBER;USERNAME
1;86730975,86536522,86793501;JOHN SMITH
2;89734562;MICHAEL ABOT
3;87903546,87265390;JAMES ALBERT 我在装货后想要做的是:
#Table data
1;86730975;JOHN SMITH
1;86536522;JOHN SMITH
1;86793501;JOHN SMITH
2;89734562;MICHAEL ABOT
3;87903546;JAMES ALBERT
3;87265390;JAMES ALBERT 在使用Sql之前,我做了类似的事情,但是我找不到源代码。所以如果有人能帮忙的话,我会很高兴的。
我是这个论坛的新手,我不知道如何找到所有与我的用户名相关的帖子,如果有人能帮忙的话,我会很感激的。
发布于 2013-12-02 17:46:32
您可以使用外部表。对我个人来说,这将是一个更方便的方式来完成它:
之后,您可以查询外部表,并使用任意(其中有许多)方法来拆分逗号分隔的字符串。在这种情况下,它将是card_number的值。例如:
这是实际数据:
SQL> column card_no format a40;
SQL> column user_name format a17;
SQL> select * from t1;
T1_ID CARD_NO USER_NAME
---------- ---------------------------------------- -----------------
1 86730975,86536522,86793501 JOHN SMITH
2 89734562 MICHAEL ABOT
3 87903546,87265390 JAMES ALBERT
3 rows selected.实际数据的转换版本:
SQL> column card_no format 9999999999;
SQL> with ocrs(ocr) as(
2 select level
3 from ( select max(regexp_count(card_no, '[^,]+')) as mx
4 from t1 ) s
5 connect by level <= s.mx
6 )
7 select *
8 from (select t.t1_id
9 , to_number(regexp_substr(t.card_no, '[^,]+',
10 1, o.ocr)) as card_no
11 , t.user_name
12 from t1 t
13 cross join ocrs o ) w
14 where w.card_no is not null
15 order by w.t1_id;结果:
T1_ID CARD_NO USER_NAME
----------- ----------- -----------------
1 86730975 JOHN SMITH
1 86793501 JOHN SMITH
1 86536522 JOHN SMITH
2 89734562 MICHAEL ABOT
3 87265390 JAMES ALBERT
3 87903546 JAMES ALBERT
6 rows selected.这样,您就可以使用简单的insert语句结合上面的查询将新的、转换的数据插入到另一个表中。
insert into another_table(id, card_number, user_name)
with ocrs(ocr) as(
select level
.....
/* the above query */https://stackoverflow.com/questions/20332728
复制相似问题