首页 > 解决方案 > 找不到 ORA-00907:缺少右括号

问题描述

我不知道这种语法有什么问题。

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)。

标签: sqloracle

解决方案


有一些子查询ORDER BY是有意义的——而且它是语法允许的。

但是,您ORDER BY量子查询中使用 - 需要返回单个值(一行/一列),并且此类子查询不允许ORDER BY.

无论如何您都在错误地使用它(很可能) - 您通过条件将行数限制为 1 ROWNUM = 1,这与您的ORDER BY可能意味着您想要排序ID_CMP,然后从结果中获取第一行。这不是它的工作原理。无论如何分配之后ORDER BY才会出现。如果那是您尝试做的事情,请删除以及条件 on ,而是在标量子查询的子句中选择。 ROWNUMORDER BYROWNUMMIN(ID_CMP)SELECT

有关缺少右括号的特定错误是由该ORDER BY子句引起的:此时,在标量子查询中,解析器期望子查询的右括号,而不是任何其他标记/子句/其他任何内容。


推荐阅读