【问题标题】:ORA-00933: SQL command not properly ended-- What am I missing? [duplicate]ORA-00933: SQL 命令未正确结束——我错过了什么? [复制]
【发布时间】:2019-08-25 12:04:20
【问题描述】:

相当简单的更新......至少我是这么想的。我收到错误:ORA-00933: SQL 命令未正确结束以下查询。

我错过了什么?

运行 Oracle 12c

查询:

UPDATE P
SET    P.SERVICE_DATE_OUT = NULL,
       P.SERVICE_DATE_IN = NULL 
FROM   PMEQMT P 
       JOIN ARINVT A ON A.ITEMNO = P.EQNO
       JOIN FGMULTI F ON F.ARINVT_ID = A.ID
WHERE  P.SERVICE_DATE_OUT IS NOT NULL AND
       P.SERVICE_DATE_IN IS NOT NULL AND
       P.CLASS = 'TL' AND
       F.LOC_ID = 27354

【问题讨论】:

    标签: sql oracle join sql-update


    【解决方案1】:

    您可以使用内联视图重写它:

    UPDATE (
      SELECT P.SERVICE_DATE_OUT, P.SERVICE_DATE_IN
      FROM   PMEQMT P 
           JOIN ARINVT A ON A.ITEMNO = P.EQNO
           JOIN FGMULTI F ON F.ARINVT_ID = A.ID
      WHERE  P.SERVICE_DATE_OUT IS NOT NULL AND
           P.SERVICE_DATE_IN IS NOT NULL AND
           P.CLASS = 'TL' AND
           F.LOC_ID = 27354
    ) s
    SET s.SERVICE_DATE_OUT = NULL,
        s.SERVICE_DATE_IN = NULL;
    

    Oracle 不支持UPDATE FROM JOIN 语法。

    【讨论】:

      【解决方案2】:

      或者(根据 Lukasz 的代码),看看这样的事情是否有帮助:

      [编辑]

      您说查询返回相同的错误。好吧,它没有 - 不适合我。

      我创建了示例表(只是必要的列),运行了查询 - 就语法而言,它是正确的。

      SQL> create table pmeqmt (service_date_out date, service_date_in date, eqno number, class varchar2(2));
      
      Table created.
      
      SQL> create table arinvt (id number, itemno number);
      
      Table created.
      
      SQL> create table fgmulti (arinvt_id number, loc_id number);
      
      Table created.
      
      SQL>
      SQL> update pmeqmt p set
        2    p.service_date_out = null,
        3    p.service_date_in = null
        4  where p.eqno in (select a.itemno
        5                   from arinvt a join fgmulti f on f.arinvt_id = a.id
        6                   where f.loc_id = 27354
        7                  )
        8    and p.service_date_out is not null
        9    and p.service_date_in is not null
       10    and p.class = 'TL';
      
      0 rows updated.
      
      SQL>
      

      【讨论】:

      • 那真是太糟糕了。这也给了我同样的错误。
      • 嗯,不应该。我通过添加一个工作示例来编辑我的消息;请看一下。如果您的尝试仍然返回 ORA-00933,请按照我的做法:编辑您的初始消息,复制/粘贴您的 SQL*Plus 会话(不要将其添加为评论,它将无法阅读)。
      • 这成功了!我一定是从你的上面抓取了代码。感谢您提供解决方案!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多