【发布时间】:2015-04-27 03:59:51
【问题描述】:
我有以下 SQL 查询:
SELECT CASE WHEN connect_by_isleaf = 1 THEN 0
WHEN level = 1 THEN 1
ELSE -1
END AS status,
level,
name AS title,
NULL AS icon,
child_id AS value,
NULL AS tooltip,
NULL AS link
FROM (
SELECT alu.arl_user_user_id AS child_id,
alu.arl_list_list_id AS parent_id,
'0' AS type,
emp.employee_name AS name
FROM arl_list_user alu
INNER JOIN arl_user au
ON au.user_id = alu.arl_user_user_id
INNER JOIN arl_active_emp emp
ON au.arl_active_employee_id = emp.employee_id
UNION
SELECT all.arl_list_list_id AS child_id,
all.arl_list_list_id1 AS parent_id,
'1' AS type,
al.name AS name
FROM arl_list_list all
INNER JOIN arl_list al
ON al.list_id = all.arl_list_list_id
) table
START WITH child_id IN (
SELECT child_id
FROM table
WHERE type = '1'
)
CONNECT BY PRIOR child_id = parent_id
这会导致解析错误:
ORA-06550:第 21 行,第 1 列:ORA-00936:缺少表达式。
我做了一些谷歌搜索,看起来“缺少表达式”通常意味着查询在某处缺少 FROM 子句,或者在 UNION 的情况下,两个联合查询的列数不同.我很确定这里不是这种情况,我无法弄清楚真正的问题是什么。
【问题讨论】:
-
您已将内部选择别名为
table,这是一个保留关键字,因为您可以从表类型中进行选择(因此缺少子句)。您不使用别名,因此请将其删除。 -
connect_by_isleaf来自哪里? -
我会尝试自己运行内部 (
UNION) 查询,看看您是否遇到同样的错误。 -
@PhilWalton:这是一个 Oracle 内置函数:docs.oracle.com/cd/E11882_01/server.112/e41084/…
-
@a_horse_with_no_name 。 . .哎呀,我的脑海里已经在那一行放了一个
as。删除了我的评论。