找不到ORA-00907:缺少正确的括号

时间:2019-01-17 23:49:49

标签: sql oracle

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

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

1 个答案:

答案 0 :(得分:3)

在某些子查询中,ORDER BY是有意义的-语法允许。

但是,您在标量子查询中使用ORDER BY-返回单个值(一行/一列)所需的子查询,并且此类子查询不允许{{1 }}。

无论如何(最有可能),您使用的是错误的-您将条件ORDER BY的行数限制为1,这与您的ROWNUM = 1一起可能意味着您想按{{ 1}},然后从结果中获取第一行。这不是它的工作方式;无论如何,ORDER BY仅在 之后出现。如果这是您要执行的操作,请删除ID_CMP以及ORDER BY上的条件,然后在标量子查询的ROWNUM子句中选择ORDER BY

关于缺少右括号的特定错误是由ROWNUM子句引起的:那时,在标量子查询中,解析器期望子查询的右括号,而不是其他任何标记/子句/任何形式。