oracle ORA-00933;SQL 命令未结束!在线等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle ORA-00933;SQL 命令未结束!在线等相关的知识,希望对你有一定的参考价值。

select a.orgcode,torg.orgname,sum(a.xscount) as xscount,sum(a.ystotal) as ystotal,sum(a.sstotal) as sstotal,sum(a.yhtotal) as yhtotal
from tsalsaleplu a ,torgmanage torg where a.orgcode=torg.orgcode and a.trantype=1
union all
(select torg.orgcode from torgmanage torg where torg.orgcode not in(select a.orgcode from tsalsaleplu a) and torg.orgtype in ('1006','1021'))
group by a.orgcode,torg.orgname;

你的where 语句不能放那里。
因为使用了union all这样的东西,它会将前面一条SQL和后面一条SQL组合成一条SQL来执行。你where写在那里,就会造成SQL语法错误了。
你可以写成这样
select * from (这是写你的SQL语句中union all之前的语句) + union all...(这就是你后面的语句了)
参考技术A 你这条语句写法就有问题
1、union all 上下2条sql 取出的列不一致不能 联合。
2、按照你的意思 group by a.orgcode,torg.orgname; 这句应该放在 union all
之前
3、不知道你的具体意思,是联合后在进行分组么,还是只要联合本回答被提问者和网友采纳
参考技术B union all 后面的select语句别用括号
select语句 union all select 语句 group by ...
参考技术C 第一,union all前后的字段数量不等,没法union all
第二,你最后一个group by应该在union all前适用
你先把你自己想要什么弄清楚

ORA-00933: SQL 命令未正确结束——我错过了啥? [复制]

【中文标题】ORA-00933: SQL 命令未正确结束——我错过了啥? [复制]【英文标题】: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

【问题讨论】:

【参考方案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 会话(不要将其添加为评论,它将无法阅读)。 这成功了!我一定是从你的上面抓取了代码。感谢您提供解决方案!

以上是关于oracle ORA-00933;SQL 命令未结束!在线等的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 ORA-00933:SQL 命令未在 oracle 中正确结束?

在更新 cx_oracle 中的表时出现 DatabaseError: ORA-00933: SQL 命令未正确结束

ORA 00933:SQL 命令未正确以 Oracle 中的 IN 运算符结束

oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?

ORA-00933: UPDATE 命令的 SQL 命令未正确结束 [关闭]

mybatis 批量插入时报错:ORACLE ORA-00933: SQL 命令未正确结束