我到处都在寻找这个功能,我几乎要放弃它了。我有一个 Oracle 表,如下所示:
name Number_of_Leaves status
cheque1 5 PPURI
cheque4 10 UUSPDRIPPP
状态列显示每个检查叶的状态:通过、已停止、已销毁、已发出等。 我需要在这样的 View 中表示信息:对于每个检查状态,我应该有一行:
name Number_of_Leaves status
cheque1 5 P
cheque1 5 P
cheque1 5 U
cheque1 5 R
cheque1 5 I
cheque4 10 U
cheque4 10 U
cheque4 10 S
cheque4 10 P
cheque4 10 D
...............................
这是否可以以任何方式实现?
最佳答案
只需自己添加此函数;) 例如,使用 TABLE 运算符和预定义的 split 函数:
CREATE OR REPLACE TYPE t_char IS TABLE OF VARCHAR2(1)
/
CREATE OR REPLACE FUNCTION TMP_SPLIT(p_val VARCHAR2)
RETURN t_char IS
v_res t_char;
BEGIN
v_res := t_char(SUBSTR(p_val,1,1));
v_res.extend(LENGTH(p_val)-1);
FOR i IN 2..LENGTH(p_val) LOOP
v_res(i) := SUBSTR(p_val,i,1);
END LOOP;
RETURN v_res;
END;
/
WITH dat AS (SELECT 'cheque1' name,
5 Number_of_Leaves,
'PPURI' status FROM DUAL
UNION
SELECT 'cheque4' name,
10 Number_of_Leaves,
'UUSPDRIPPP' status FROM DUAL)
SELECT dat.name, dat.number_of_leaves, spl.*
FROM dat
LEFT JOIN TABLE(TMP_SPLIT(dat.status)) spl ON 1=1
/
现有表调用函数的示例:
SELECT table1.name, table1.number_of_leaves, spl.*
FROM table1
LEFT JOIN TABLE(TMP_SPLIT(table1.status)) spl ON 1=1
关于sql - 将列字符拆分为行 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22351791/