【发布时间】:2016-10-21 01:44:16
【问题描述】:
我正在尝试从表中创建一个视图,该视图会将多列中的逗号分隔值转换为 Oracle 中的行。
我已经成功地为一栏做到了这一点。但我无法为两三列做到这一点。
我使用以下脚本成功运行了一列。
Create VIEW MULTITESET AS
SELECT rownum AS ID1,Tagging.COMMENTS,Tagging.category,Tagging.STATUS,
trim(regexp_substr(Tagging.OBJ_ID, '[^,]+', 1, lines.column_value)) OBJ_ID
FROM Tagging,
TABLE (CAST (MULTISET
(SELECT LEVEL FROM dual
CONNECT BY instr(Tagging.OBJ_ID, ',', 1, LEVEL - 1) > 0
) AS sys.odciNumberList ) ) lines
ORDER BY id, lines.column_value
现在我需要对名为 OBJname 的第二列执行相同的操作,就像对列 OBJ_ID 一样。
所以我尝试了一些愚蠢的方法,例如以下不起作用。
Create VIEW MULTITESET AS
SELECT rownum AS ID1,Tagging.COMMENTS,Tagging.category,Tagging.STATUS,
trim(regexp_substr(Tagging.OBJ_ID, '[^,]+', 1, lines.column_value)) OBJ_ID
FROM Tagging,
TABLE (CAST (MULTISET
(SELECT LEVEL FROM dual
CONNECT BY instr(Tagging.OBJ_ID, ',', 1, LEVEL - 1) > 0
) AS sys.odciNumberList ) ) lines
ORDER BY id, lines.column_value ,
trim(regexp_substr(Tagging.OBJname , '[^,]+', 1, lines.column_value)) OBJname
FROM Tagging,
TABLE (CAST (MULTISET
(SELECT LEVEL FROM dual
CONNECT BY instr(Tagging.OBJname , ',', 1, LEVEL - 1) > 0
) AS sys.odciNumberList ) ) lines
ORDER BY id, lines.column_value
简而言之,我希望将下图中的 table-A 转换为 table-B。我该怎么做?
我的实际视图查询是:
SELECT rownum AS TRACKID2, LEAPFROG_TAGGING.ID, LEAPFROG_TAGGING.CREATED_DATE,
LEAPFROG_TAGGING.CREATED_BY, LEAPFROG_TAGGING.COMMENTS,
leapfrog_tagging.category, LEAPFROG_TAGGING.STATUS, LEAPFROG_TAGGING.OBJ_NAME,
trim(regexp_substr(LEAPFROG_TAGGING.OBJ_ID, '[^,]+', 1, lines.column_value)) OBJ_ID
FROM LEAPFROG_TAGGING,
TABLE (CAST (MULTISET (
SELECT LEVEL FROM dual
CONNECT BY instr(LEAPFROG_TAGGING.OBJ_ID, ',', 1, LEVEL - 1) > 0
) AS sys.odciNumberList ) ) lines
ORDER BY id, lines.column_value;
【问题讨论】: