一、多选记录合并
1. 因为网上有各种关于多行记录合并的方案:有直接SQL,有自定义方法等,在此不再介绍;
2. 本人只介绍最偷懒的方法,条件为数据库为oracle 10g,本人比较懒(此次不提供自定义方法)
3. 在oracle 10g以上版本,可以使用以下系统函数
WMSYS.WM_CONCAT(列名),用法如下
:
SELECT ID, WMSYS.WM_CONCAT(OID) OID FROM TABLE GROUP BY ID
4. 如果为
oracle 10g以下版本,建议使用自定义方法,暂无。
二、单行记录拆分
1. 对于单选记录拆分不知道oracle有没有提供系统函数了,在此不纠结此问题;
2. 我们提供自定义的方法,方法如下:
CREATE OR REPLACE FUNCTION SPLITSTR(P_STRING IN VARCHAR2,
P_DELIMITER IN VARCHAR2)
RETURN STR_SPLIT
PIPELINED AS
V_LENGTH NUMBER := LENGTH(P_STRING);
V_START NUMBER := 1;
V_INDEX NUMBER;
BEGIN
WHILE (V_START <= V_LENGTH) LOOP
V_INDEX := INSTR(P_STRING, P_DELIMITER, V_START);
IF V_INDEX = 0 THEN
PIPE ROW(SUBSTR(P_STRING, V_START));
V_START := V_LENGTH + 1;
ELSE
PIPE ROW(SUBSTR(P_STRING, V_START, V_INDEX - V_START));
V_START := V_INDEX + 1;
END IF;
END LOOP;
RETURN;
END SPLITSTR;
3. 用法如下:
SELECT *
FROM TABLE (SELECT SPLITSTR(ACTORS, ',') ACTORS
FROM WF_NODE
WHERE NODEINDEX = 4)