小编典典

使用AS关键字时,ORA-907缺少右括号

sql

我得到带有以下sql语句的ORA-907。看来使用AS关键字存在问题。当我删除AS关键字并在语句中使用完整的表名时,它会按预期工作。

这是oracle的已知问题吗?它运行在11g上,需要更多详细信息时,我必须与管理员联系。我发现了一些较旧的提示,指出在版本<11中存在错误。

SELECT easbwaredgs_t.id, easbwaredgs_t.fk_easbware_id, easbwaredgs_t.mandant, easbwaredgs_t.reg_code_mc,   
       easbwaredgs_t.hazard_code_ident, easbwaredgs_t.add_hazard_code, easbwaredgs_t.haz_code_version,   
       easbwaredgs_t.undg_number, easbwaredgs_t.ship_flashpoint, easbwaredgs_t.flashpoint_type,   
       easbwaredgs_t.cont_dopc, easbwaredgs_t.cont_dop, easbwaredgs_t.cont_phone, easbwaredgs_t.verpack_grp_mc,   
       easbwaredgs_t.ems_nr, easbwaredgs_t.trem_card_nr, easbwaredgs_t.secondimo, easbwaredgs_t.thirdimo,
       (
         SELECT COUNT(*)
         FROM easbwaredgs_t AS k
           LEFT OUTER JOIN easbdgstn_t AS p ON k.id = p.fk_easbwaredgsid
         WHERE k.mandant = '001'
           AND k.fk_easbware_id = 1
           AND p.type_mc = 'TRANSPORT_DGS_LIM_QUANT'
       ) AS cc_is_limited_quantities
FROM easbwaredgs_t
WHERE easbwaredgs_t.mandant = '001'
  AND easbwaredgs_t.fk_easbware_id = 1

阅读 240

收藏
2021-04-15

共1个答案

小编典典

你的问题是as。但是,我认为您的查询旨在成为一个相关的子查询。这应该写为:

SELECT e.id, e.fk_easbware_id, e.mandant, e.reg_code_mc,   
       e.hazard_code_ident, e.add_hazard_code, e.haz_code_version,   
       e.undg_number, e.ship_flashpoint, e.flashpoint_type,   
       e.cont_dopc, e.cont_dop, e.cont_phone, e.verpack_grp_mc,   
       e.ems_nr, e.trem_card_nr, e.secondimo, e.thirdimo,
       (SELECT COUNT(*)
         FROM easbdgstn_t p ON 
         WHERE e.id = p.fk_easbwaredgsid AND
               p.type_mc = 'TRANSPORT_DGS_LIM_QUANT'
       ) AS cc_is_limited_quantities
FROM easbwaredgs_t e
WHERE e.mandant = '001' AND
      e.fk_easbware_id = 1;

只是为了澄清一下: as列别名是允许的(也是期望的)。Oracle中不允许使用表别名。

2021-04-15