【ORACLE】 两个order by的SQL使用 UNION 或者 UNION ALL 报错 ORA-00933:sql命令未正确结束

在oracle sql中,要求order by是select语句的最后一个语句,而且一个select语句中只允许出现一个order by语句,而且order by必须位于整个select语句的最后。

union操作实际上做了两部分动作:结果集合并 + 排序,

union all只进行结果集简单合并,不做排序,效率比union高 。

例子:    表一:table1  查询语句 : select  * from table1 t1  order by t1. c1  ;

            表二:table2  查询语句 : select  * from table1 t2  order by  t2.c1  .

  需求:合并表一表二结果集,使用union  或者 union all 都会报错:ORA-00933 sql命令未正确结束。

  原因:oracle 认为第一个order by结束后整个select语句就该结束了,但是发现后面没有逗号(;)或斜线(/)结束符,反而后边有 union all 或者 union,即sql语句并未结束,所以报错。

  解决:使用  with ... as ... select ...

     with s1 as (select  * from table1 t1  order by t1. c1 ),

     s2 as ( select  * from table1 t2  order by  t2.c1 )

     select  *  from s1 union all (此处可以换为 union ) select * from s2

参考:https://blog.csdn.net/zhx624/article/details/20373785

原文地址:https://www.cnblogs.com/crius-dlz/p/12095854.html

时间: 2024-12-09 08:41:44

【ORACLE】 两个order by的SQL使用 UNION 或者 UNION ALL 报错 ORA-00933:sql命令未正确结束的相关文章

oracle 两个sql带有order by的使用union/union all的时候报错 'ORA-00933:sql命令未正确结束' 处理办法

错误语句:select id,name from s1 order by stime union all select id,name from s2 order by stime 报错原因:oracle 搜索到order by后认为整个select语句就该结束了但是后面还有union all所以数据库无法解析,导致报错 处理办法:with a1 as (select id,name from s1 order by stime) , a2 as (select id,name from s2

解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置. (3)collection:根据传入的参数值确定. (4)open:表示该语句以什么开始. (5)separator:表示在每次进行迭代之间以什么符号作为分隔 符. (6)close:表示以什么结束. 首先,错误的xml配置文件如下: <insert id="save" da

Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错GConf error

Linux 的 GConf error 解决办法 问题: Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错,导致重新进入Centos系统后出现: GConf error:Failed to contact configuration server;some possible cause are that you need to enable TCP/IP networking for ORBIT or you have stale NFSlocks due to a sys

mysql插入报错:java.sql.SQLException: Incorrect string value: &#39;\xE6\x9D\xAD\xE5\xB7\x9E...&#39; for column &#39;address&#39; at row 1

界面报错: 日志报错: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xAD\xE5\xB7\x9E...' for column 'address' at row 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.17.jar:8.0.17] at com.mys

利用sql报错帮助进行sql注入

我们可以利用sql报错帮助进行sql注入,这里以sql server 为例: sql查询时,若用group by子句时,该子句中的字段必须跟select 条件中的字段(非聚合函数)完全匹配,如果是select * ,那就必须将该表中所有列名都包含在group by 中:若少了哪个,就会报错,报错中会提示如下; 选择列表中的列 '列名'无效,因为该列没有包含在聚合函数或 GROUP BY 子句中. 这个提示的列名是按该表中的顺序来的,这时我们可以利用这点进行sql注入中枚举所有列的工作: 先使用

Microsoft SQL Server 2008 R2附加数据库报错5120解决办法

Microsoft SQL Server 2008 R2数据库附加报错5120,是权限的问题解决办法:邮件数据库文件的属性选中Authenticated Users 然后选中编辑把完全控制勾选上 单击确定,然后就可以附加数据库了 ! 若有疑问可以联系我www.jiangyong.net.cn,里面有我的QQ

SQL Server 2008 R2 启用sa 报错

错误信息:更改对于登录sa失败... 凭借印象,启用需要两步,先把服务器属性中的登录模式改为Sql Server和windows模式. 第二步服务器登录名中右键sa属性,把状态里的登录设为启用,因为是自己本地,所以把强制实施密码策略也给勾掉. 但是点确定的时候出现了报错. 后来尝试性的把sa属性里的“映射到凭据”给勾上,重复第二步,不用其他操作,点确定.ok!

springboot启动提示连接mysql报错:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required

如题,启动springboot报错: 2019-12-23 11:08:17.506 INFO 1982 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 9988 (http) 2019-12-23 11:08:17.602 INFO 1982 --- [ main] o.apache.catalina.core.StandardService : Starting se

mybatis之insert语句报错Cause: java.sql.SQLException: sql injection violation, syntax error: ERROR. token : WHERE,

报错日志:org.springframework.jdbc.UncategorizedSQLException: Error updating database. Cause: java.sql.SQLException: sql injection violation, syntax error: ERROR. token : WHERE, pos : 315 : UPDATE jxdx_leave 报错原因:多了一个逗号: 关键看token后面,这里通过token可以直接定位报错地点: 原文