代码抛出错误 ORA-00907:缺少右括号

Posted

技术标签:

【中文标题】代码抛出错误 ORA-00907:缺少右括号【英文标题】:Code throws Error ORA-00907: missing right parenthesis 【发布时间】:2018-03-29 03:53:06 【问题描述】:

谁能解释一下为什么会出现这个错误?

SELECT CONTRACT_ID, DATEKEY, 'Projection', '1', OPEN_BALANCE,
  PRINC_REPAYMENT, INTEREST, PAR_PREPAYMENT, FULL_REDEMPTION, REDRAW_AMOUNT, PRIN_DEFAULTS,
  PRIN_RECOVERY, PRIN_DEL, INTE_DEL, DEL_PRIN_COLL, DEL_INT_COLL, CLOSE_PRIN_BAL, EXT_ID,
  LAS_ACTIVE_FLG, PROD_ID, ASSET_TYP_ID, CPT_ID, ACCRETION, CASHFLOW_DT 
FROM FACT_PWOR_CASHFLOW
WHERE ACTUAL_FLG = 'Y' AND LATEST_PROJ_IND = '0' AND LAS_ACTIVE_FLG = 'Y'
UNION
(SELECT CONTRACT_ID, DATEKEY_COLL, 'Actual', '1', SUM(OPENING_BALANCE) SUM_OPEN_BAL,
    SUM(MI_PRINCIPLE) SUM_MI_PRIN, SUM(MI_INTEREST) SUM_MI_INTER, SUM(PARTIAL_PREPAYMENT) SUM_PAR_PREPAY,
    SUM(FULL_REDEMPTION) SUM_FULL_REDEM, SUM(TTL_AMT_REDRAW) SUM_TTL_AMT,
    '0', '0', '0', '0', '0', '0', SUM(CLOSING_BALANCE) SUM_CLOS_BAL, '0', 'Y',
    PROD_ID, ASSET_TYPE_ID, CPT_ID, '0', COLLECTION_START_DT
FROM FACT_PWOR_COLLECTION
WHERE LAS_ACTIVE_FLG = 'Y'
GROUP BY CONTRACT_ID, DATEKEY_COLL, PROD_ID, ASSET_TYPE_ID, CPT_ID, COLLECTION_START_DT
ORDER BY CONTRACT_ID, DATEKEY_COLL);

【问题讨论】:

【参考方案1】:

这个错误很常见,因为您在嵌套查询中有一个ORDER BY(请参阅第二个SELECT 中括号的使用位置)。 Oracle 不支持,所以它会给你这个错误。您可以在没有嵌套查询的情况下重写它,或者删除顺序,它应该可以工作

【讨论】:

以上是关于代码抛出错误 ORA-00907:缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL - 奇怪的“ORA-00907 缺少右括号”错误

将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号

错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号

获取“ORA-00907:缺少右括号”,找不到错误

请帮助解决“ORA-00907:缺少右括号”错误

SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”