0
SELECT /*+ PARALLEL(aae,4) */ DISTINCT nvl(aae.voucher_group_id,-1)  voucher_group_id,
                           aae.nominal_transaction_amount unit_price,
                           aae.original_currency_type currency_type,
                           aae.segmentation_id
             FROM air_account_events aae
            WHERE aae.time_hour_id >= m_start_thid
              AND aae.time_hour_id < m_end_thid
              AND aae.nominal_transaction_amount is not null 
           MINUS
           SELECT vg.voucher_group_id,
                  vg.unit_price,
                  vg.currency_type,
                  vg.segmentation_id
             FROM wh_voucher_groups_dim vg) ahm
    ON (whm.voucher_group_id = ahm.voucher_group_id AND whm.unit_price = ahm.unit_price 
    AND whm.currency_type = ahm.currency_type AND whm.segmentation_id=ahm.segmentation_id) ahm

当我运行以下 PL/SQL 时出现错误

         FROM wh_voucher_groups_dim vg) ahm
                                      *

第 14 行出现错误:ORA-00933:SQL 命令未正确结束

你能指导一下哪里有错误,还请指导改变吗


4

4 回答 4

2

You are missing a JOIN condidition in this line:

FROM wh_voucher_groups_dim vg) ahm
   JOIN ???????
   ON (whm.voucher_group_id ....
于 2011-07-21T12:47:15.473 回答
2

编辑:根据您在下面的评论... 您可能正在寻找这个..?您需要在大括号中包含完整的内部查询,给它一个别名,然后将其连接到另一个表。没有必要使用“使用”。

select * from wh_voucher_groups_dim whm,
( SELECT /*+ PARALLEL(aae,4) */ 
         DISTINCT nvl(aae.voucher_group_id,-1)  voucher_group_id,
                           aae.nominal_transaction_amount unit_price,
                           aae.original_currency_type currency_type,
                           aae.segmentation_id
             FROM air_account_events aae
            WHERE aae.time_hour_id >= m_start_thid
              AND aae.time_hour_id < m_end_thid
              AND aae.nominal_transaction_amount is not null 
           MINUS
           SELECT vg.voucher_group_id,
                  vg.unit_price,
                  vg.currency_type,
                  vg.segmentation_id
             FROM wh_voucher_groups_dim vg
 ) ahm
    WHERE  (whm.voucher_group_id = ahm.voucher_group_id AND 
            whm.unit_price = ahm.unit_price AND
            whm.currency_type = ahm.currency_type AND 
            whm.segmentation_id=ahm.segmentation_id)

您之前可能有一个 ANSI 连接语法,并且您在第二个查询中删除了该部分?

SELECT vg.voucher_group_id,
                  vg.unit_price,
                  vg.currency_type,
                  vg.segmentation_id
             FROM wh_voucher_groups_dim vg) ahm
    ON (whm.voucher_group_id = ahm.voucher_group_id AND 
        whm.unit_price = ahm.unit_price AND
        whm.currency_type = ahm.currency_type AND  
        whm.segmentation_id=ahm.segmentation_id) ahm

FROM wh_voucher_groups_dim vg) ahm ON (whm.voucher_group_id = ahm.voucher_group_id AND

这里应该有另一个别名为 whm 的表吗?

于 2011-07-21T12:48:12.563 回答
1

为了使用 ON 关键字,您需要在其前面加入一个连接。我在下面添加了 JOIN 关键字。您需要自己决定是否需要标准连接、外部连接、内部连接等。

             FROM wh_voucher_groups_dim vg) ahm JOIN <table>
    ON (whm.voucher_group_id = ahm.voucher_group_id AND whm.unit_price = ahm.unit_price 
    AND whm.currency_type = ahm.currency_type AND whm.segmentation_id=ahm.segmentation_id) ahm 
于 2011-07-21T12:48:53.040 回答
0

我的猜测是,这是更大查询的一部分,并且以某种方式删除了开始部分:

SELECT ...                  --- missing part
FROM ...                    --- missing part
    sometable whm           --- missing part
        SOME JOIN           --- missing part
    (                       --- missing part

      SELECT /*+ PARALLEL(aae,4) */ DISTINCT ...
      ...
      FROM wh_voucher_groups_dim vg
    ) ahm
      ON ( whm.voucher_group_id = ahm.voucher_group_id 
       AND whm.unit_price = ahm.unit_price 
       AND whm.currency_type = ahm.currency_type 
       AND whm.segmentation_id=ahm.segmentation_id
         )
于 2011-07-21T13:05:23.450 回答