【问题标题】:ORA-00933: SQL command not properly ended - Oracle SQL errorORA-00933: SQL 命令未正确结束 - Oracle SQL 错误
【发布时间】:2017-08-15 12:11:23
【问题描述】:

我正在尝试使用 oracledb Node.js 模块对 Oracle DB 运行 SELECT 查询。

这是我的查询:

SELECT
        gcc.concatenated_segments Code_combination,
        SUM (NVL(gb.begin_balance_dr,
        0) - NVL(gb.begin_balance_cr,
        0)) beginning_bal,
        SUM (NVL(gb.begin_balance_dr,
        0) - NVL(gb.begin_balance_cr,
        0) (NVL(gb.period_net_Dr,
        0) - NVL(gb.period_net_cr,
        0))) end_bal 
    FROM
        gl_balances gb,
        gl_code_combinations_kfv gcc 
    WHERE
        gb.code_combination_id = gcc.code_combination_id 
        AND gcc.CONCATENATED_SEGMENTS = '01-000-2990-0000-000' 
        AND gb.ledger_id  = 1 
        AND gb.Actual_flag = 'A' 
        AND gb.period_name = 'Nov-16' 
        AND gb.currency_code = (
            SELECT
                currency_code 
            FROM
                gl_ledgers 
            WHERE
                ledger_id = gb.ledger_id 
        ) 
    GROUP BY
        gcc.concatenated_segments;

谁能指出我在这个查询中哪里出错了,我看不出有什么问题!如果有帮助,我可以发布整个代码示例,但这似乎是 SQL 的问题。

【问题讨论】:

  • 我有一个以;结尾的问题,尝试删除;
  • 第 8 行 (NVL(gb.period_net_Dr, 之前缺少一些代数符号。
  • 正确,还按照@user7294900 的建议删除了; 使其工作。

标签: sql node.js oracle


【解决方案1】:

你遗漏了一些代数:

SELECT
    gcc.concatenated_segments Code_combination,  <--- You need a comma separating these two
    SUM (NVL(gb.begin_balance_dr,
    0) - NVL(gb.begin_balance_cr,
    0)) beginning_bal,
    SUM (NVL(gb.begin_balance_dr,
    0) - NVL(gb.begin_balance_cr,
    0) (NVL(gb.period_net_Dr,      <---- And you need a subtraction sign before NVL here
    0) - NVL(gb.period_net_cr,
    0))) end_bal 
FROM ...

【讨论】:

  • Concatenated_segments 表示 Oracle E Business Suite 中的“Code_combination”,OP 没有标记。
  • 我需要使用gcc.concatenated_segments as Code_combination 以及其他建议中的一些建议。谢谢
【解决方案2】:

您的select 肯定有语法错误,在下面标记的行中。

如果你把代码写得整洁,你就更有可能避免这样的错误:

SELECT gcc.concatenated_segments as Code_combination,
       SUM(NVL(gb.begin_balance_dr, 0) -
           NVL(gb.begin_balance_cr, 0)
          ) as beginning_bal,
       SUM(NVL(gb.begin_balance_dr, 0) -
           NVL(gb.begin_balance_cr, 0) -  -- this is a guess
           (NVL(gb.period_net_Dr, 0) -
            NVL(gb.period_net_cr, 0)
           )
          ) as end_bal 

您的代码中可能还有其他错误。

【讨论】:

  • 你是对的——那条线上缺少一些代数。我还不得不听取其他 cmets 的建议
【解决方案3】:

好的,感谢所有 cmets。通过接受您的所有反馈,我能够从数据库中获取结果。这是我正在运行的 SQL:

SELECT
        gcc.concatenated_segments as Code_combination,
        SUM (NVL(gb.begin_balance_dr,
        0) - NVL(gb.begin_balance_cr,
        0)) as beginning_bal,
        SUM (NVL(gb.begin_balance_dr,
        0) - NVL(gb.begin_balance_cr,
        0) - (NVL(gb.period_net_Dr,
        0) - NVL(gb.period_net_cr,
        0)))as end_bal 
    FROM
        gl_balances gb,
        gl_code_combinations_kfv gcc 
    WHERE
        gb.code_combination_id = gcc.code_combination_id 
        AND gcc.CONCATENATED_SEGMENTS = '01-000-2990-0000-000' 
        AND gb.ledger_id  = 1 
        AND gb.Actual_flag = 'A' 
        AND gb.period_name = 'Nov-16' 
        AND gb.currency_code = (
            SELECT
                currency_code 
            FROM
                gl_ledgers 
            WHERE
                ledger_id = gb.ledger_id 
        ) 
    GROUP BY
        gcc.concatenated_segments

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多