ORA-00933:SQL命令未正确结束--我缺少什么?

29 浏览
0 Comments

ORA-00933:SQL命令未正确结束--我缺少什么?

这个问题已经在以下网址有答案:

Oracle上使用内联结更新语句

在Oracle中使用连接查询更新

使用内联结的Oracle更新语句

使用连接的Oracle更新查询

相当简单的更新... 或者我是这样认为的。下面的查询导致了错误: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

admin 更改状态以发布 2023年5月21日
0
0 Comments

此外(相对于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>

0
0 Comments

你可以用内联视图重写它:

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 语法。

0