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;
因为使用了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 命令未正确结束 如何解决?