1
我想在Oralce的11g的一个以下CTE查询,但我得到一个错误说甲骨文CTE查询:数据类型错误ORA-00932
ORA-00932:不一致的数据类型:预期数量得到CHAR。
任何想法这是什么根源?
create table PC (
EMP_ID NUMBER NULL,
MGR_ID NUMBER NULL
);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (1.0, NULL);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (2.0, 1.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (3.0, 1.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (4.0, 2.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (5.0, 2.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (6.0, 2.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (7.0, 3.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (8.0, 5.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (9.0, 7.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (10.0, 5.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (11.0, 7.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (12.0, 9.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (13.0, 9.0);
INSERT INTO PC (EMP_ID, MGR_ID)
VALUES (14.0, 9.0);
SELECT * FROM pc;
with Tree (EMP_ID, MGR_ID, lv, level1, level2, level3, level4, level5) as
(
SELECT EMP_ID
, MGR_ID
, 1 as lv
, 1 as level1
, null as level2
, null as level3
, null as level4
, null as level5
FROM PC
WHERE MGR_ID IS NULL
UNION ALL
SELECT E.EMP_ID
, E.MGR_ID
, T.lv + 1
, case when T.lv + 1 = 1 then E.EMP_ID else T.level1 end
, case when T.lv + 1 = 2 then E.EMP_ID else T.level2 end
, case when T.lv + 1 = 3 then E.EMP_ID else T.level3 end
, case when T.lv + 1 = 4 then E.EMP_ID else T.level4 end
, case when T.lv + 1 = 5 then E.EMP_ID else T.level5 end
FROM Tree T inner join PC E
ON (T.EMP_ID = E.MGR_ID)
)
select *
from Tree
你想'level1'等这些初始值是零?它看起来像查询工程,如果你改变它为0看到这个演示 - http://sqlfiddle.com/#!4/dac35/1 – Taryn
谢谢,这解决了这个问题,你可以做出这个答案,所以我可以接受? – jrara
你也可以使用“cast(null作为数字)作为level2”等 –