我不知道这种语法有什么问题。
SELECT Count (id_conv) AS NUM_CAMP
FROM csd_mx_mae_camp_dro
WHERE id_conv = (SELECT id_conv
FROM csd_mx_mae_conv_dro
WHERE num_cta = 60385300500)
AND id_cncpt = (SELECT A.id_cncpt
FROM csd_mx_mae_camp_dro A
INNER JOIN csd_mx_mae_cncpt_dro B
ON A.id_cncpt = B.id_cncpt
WHERE ( ( flg_tipo_camp = 'A'
AND txt_nombr_clase_logic IS NOT NULL )
OR ( flg_tipo_camp = 'C' ) )
AND txt_nom NOT IN ( 'Concepto' )
AND B.txt_cve = '84'
AND A.id_conv = (SELECT id_conv
FROM csd_mx_mae_conv_dro
WHERE num_cta = 60385300500)
AND rownum = 1
ORDER BY id_cmp)
AND flg_tipo_camp = 'A';
考虑到我在数据库中的记录,预期结果为4,但是标题中出现了我提到的错误(ORA-00907:缺少正确的括号) 00907. 00000-“缺少右括号” *原因: *动作: 该行中的错误:171,列:90)。
答案 0 :(得分:3)
在某些子查询中,ORDER BY
是有意义的-语法允许。
但是,您在标量子查询中使用ORDER BY
-返回单个值(一行/一列)所需的子查询,并且此类子查询不允许{{1 }}。
无论如何(最有可能),您使用的是错误的-您将条件ORDER BY
的行数限制为1,这与您的ROWNUM = 1
一起可能意味着您想按{{ 1}},然后从结果中获取第一行。这不是它的工作方式;无论如何,ORDER BY
仅在 之后出现。如果这是您要执行的操作,请删除ID_CMP
以及ORDER BY
上的条件,然后在标量子查询的ROWNUM
子句中选择ORDER BY
。>
关于缺少右括号的特定错误是由ROWNUM
子句引起的:那时,在标量子查询中,解析器期望子查询的右括号,而不是其他任何标记/子句/任何形式。