ORA-00907: 缺少右括号 2
Posted
技术标签:
【中文标题】ORA-00907: 缺少右括号 2【英文标题】:ORA-00907: missing right parenthesis 2 【发布时间】:2013-01-16 14:02:00 【问题描述】:我正在尝试执行此查询以在 db-visualizer 中获得一些结果,但我不断收到以下响应:
回应:
[错误代码:907,SQL 状态:42000] ORA-00907:缺少右括号
已编辑 查询:
SELECT * FROM (
SELECT
e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd
FROM Staging.db_&tablename_v._match e, client.clt_address ca, client.clt_add_usg au
WHERE substr(match_desc,1,2) = '00'
and e.clt_ofc_no=au.clt_ofc_no(+)
and e.clt_no=au.clt_no(+)
and au.clt_ofc_no=ca.clt_ofc_no(+)
and au.clt_add_key=ca.clt_add_key(+)
and au.clt_add_type(+)='PRI'
UNION ALL
SELECT
e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd
FROM Staging.db_&tablename_v._match e, staging.clt_address_cp au
WHERE substr(match_desc,1,2) in ('01','02')
and e.namadd_no = au.namadd_no(+)
) foo ORDER BY match_desc, seq_no;
【问题讨论】:
【参考方案1】:用途:
SELECT e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd, match_desc, seq_no
FROM Staging.db_&tablename_v._match e
LEFT JOIN client.clt_add_usg au ON au.clt_ofc_no = e.clt_ofc_no
AND au.clt_no = e.clt_no
AND au.clt_add_type = 'PRI'
LEFT JOIN client.clt_address ca ON ca.clt_ofc_no = au.clt_ofc_no
AND ca.clt_add_key = au.clt_add_key
WHERE substr(match_desc,1,2) = '00'
UNION ALL
SELECT e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd, match_desc, seq_no
FROM Staging.db_&tablename_v._match e
LEFT JOIN staging.clt_address_cp au ON au.namadd_no = e.namadd_no
WHERE substr(match_desc,1,2) IN ('01','02')
ORDER BY match_desc, seq_no
不需要派生表/内联视图。但是不清楚被排序的列是否已经在查询中(IE:e.*),所以我明确地将它们添加到最后。
我重新编写了查询以使用 ANSI-92 连接语法 - 您的查询使用了很久以来不推荐使用的外部连接方法。
我没有您的数据库和表格。确定问题的最简单方法是缩减查询,直到它开始返回数据。然后,逐一添加条件(列、表、WHERE/etc 子句),看看哪里出了问题。
【讨论】:
我在使用您的查询时收到以下消息:“ORA-00933: SQL 命令未正确结束”【参考方案2】:使用任一:
substr(match_desc,1,2) in ('00')
或
substr(match_desc,1,2) = '00'
【讨论】:
我删除了 () 并将其更改为 substr(match_desc,1,2) = '00' 。但我仍然得到同样的错误【参考方案3】:我猜你的 GUI 没有被替换
Staging.db_&tablename_v._match
正确。试试这个:
select 'Staging.db_&tablename_v._match' from dual;
结果如何?我猜它会像这样离开表名
Staging.db_whatever._match
而不是预期的
Staging.db_whatever_match
【讨论】:
@Ish 只是从双重运行中选择? (即不要把它放到你原来的 sql 或任何东西中。只是单独运行它。【参考方案4】:问题是 &tablename_v。需要删除,并且应该在适当的位置插入表名(即 DATES)。我试过了,它奏效了。
但是谢谢大家的帮助!非常感谢:)
【讨论】:
以上是关于ORA-00907: 缺少右括号 2的主要内容,如果未能解决你的问题,请参考以下文章
错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号