ORA-00923: FROM keyword not found where expected
网上搜索这类错误还是挺多的,只提供我遇到的一种情景。
本地数据库环境:Oracle10g
导入别人的项目后,有一段SQL查询总是报如下错误信息:
Cause: java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
定位到该段SQL后直接通过工具运行报同样的错误,SQL如下:
SELECT
t.depart_id,
listagg (t.user_name, ',') WITHIN GROUP (ORDER BY t.user_name) user_name
FROM
depart_user_relation t
WHERE
t.depart_id = '20'
GROUP BY
t.depart_id
错误信息如下:
ORA-00923: FROM keyword not found where expected
原因:listagg within 为 Oracle11g 后引入的,在 Oracle10g 中不支持。
解决方案:
1、升级到Oracle11
2、寻求替代方案
首先在寻求替代方案之前要了解该函数的作用。
该函数可以实现按条件实现列转行。 第二个参数可以灵活的选择 “ ,| - ” 等符号。
我上边那个 SQL 就是想通过 depart_id 进行分组,然后把 user_name 进行列转行。

上实图,左侧即数据库原始数据,右侧为使用 listagg 函数后的效果。
WM_CONCAT函数介绍
wm_concat 函数也可以用作字符串拼接,也是一种聚合函数,也可以用作分析函数,只是函数本身不能像 listagg 那样自由选择间隔字符,固定使用逗号分隔,但可以用其他函数(例如REPLACE)来实现分隔符的改变。唯一无法实现的是,不能自由选择排序的依据,也就是 listagg 中必须使用的 order by 子句。
WM_CONCAT用法示例
select depart_id,wm_concat(user_name)
from depart_user_relation
group by depart_id;
由于固定的使用逗号分隔符,所以,如果想替换的话可以使用 REPLACE 函数,具体使用如下:
select depart_id, REPLACE(wm_concat(user_name),',','|')
from depart_user_relation
group by depart_id;
这样就实现了 ,号转 | 了,当然 | 还可以为其他字符。
最后:尽管采用 wm_concat 函数替代了11g新加入的 listagg 函数,但是 wm_concat 函数并不能实现组内排序的短板,若无分组排序要求的话,两者是可以通用。
ORA-00923: FROM keyword not found where expected的更多相关文章
- [Err] ORA-00923: FROM keyword not found where expected 与rownum
关于oracle的nownum 如果我想查询表的全部信息,并且前面加上行号,sql如下 select ROWNUM,* from tableA 会报下面的错误 [Err] ORA-00923: FR ...
- exception ORA-00923: FROM keyword not found where expected
exception ORA-00923: FROM keyword not found where expected CreationTime--2018年8月16日10点41分 Author:M ...
- robotframework出现错误:Keyword 'AppiumLibrary.Open Application' expected 1 to 2 non-keyword arguments,got 5.
robotframework官网: http://robotframework.org/#introduction -------------- 出现的场景: 由于一开始不了解robotframewo ...
- ORA-00923: FROM keyword not found where expected(单双引号)
1.前提 在学习oracel的过程中遇到的一个关于单双引号的问题 备注一下 2.学习过程中创建表语句是这样的 create table DEPT_DML --部门表( DEPT_NO NUMBER(8 ...
- Oracle ORA-00923: FROM keyword not found where expected
不同于 MySQL,请检查 from 之前显示的字段,尤其是 AS 命名符号的引用. 在 Oracle 中单引 AS 'XXX’ 是错误的,需要修改为双引 "XXX" 或者是干脆去 ...
- [20181015]12C SQL Translation Framework.txt
[20181015]12C SQL Translation Framework.txt --//12c提供一个dba改写sql语句的可能性,实际上10g,11g之前也有一个包DBMS_ADVANCED ...
- How to Resize a Datafile (文档 ID 1029252.6)
APPLIES TO: Oracle Database - Enterprise Edition - Version 9.2.0.1 and laterInformation in this docu ...
- Oracle之别名小结
今天在写一个简单的SQL语句并执行时抛出了如下图所示的一个错误提示信息! 恩,此异常信息很明显,在SQL语句中标示符的长度过长了,简短一些就应该没问题了,我查看了一下我的SQL语句发现是我的查询字段的 ...
- SQL[Err]ORA-00XXX: missing 相关
1.[Err]ORA-00936: missing expression 造成这个错误的原因是:选取的最后一个字段与from之间有逗号 解决方法:将字段与from之间的逗号去掉. 2.[Err] OR ...
随机推荐
- C#应用程序单例并激活程序的窗口 使其显示在最前端
public class SoftHelper { ///<summary> /// 该函数设置由不同线程产生的窗口的显示状态 /// </summary> /// <p ...
- sql server 索引优化
查询实际执行计划,看走的是那种查询 要根据需求,建立合适的索引 经常需要汇总的,可以建立包含索引 --drop index ix_smssend_created on smssent_1 ; crea ...
- 初识Go语言--(2)Hello World
新建hello.go文件,内容如下 package main import "fmt" func main() { //输出Hello World fmt.Println(&quo ...
- python的import和form...import的区别
import和form...import的区别 参考链接 骏马金龙 https://www.cnblogs.com/lzc978/p/10105194.html 普通区别 import 使用impor ...
- eclipse卡在revert resources的解决方法
遇到Eclipse卡在Revert Resources进程的问题,等又等不到它执行完毕(进度一直是0%),取消又是石沉大海一样毫无动静.更气人的是这个进程阻塞了其他所有的进程,什么操作都做不了.真是苦 ...
- 【转】用VMware 8安装Ubuntu 12.04详细过程(图解)
图解演示环境版本: 本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS (请点击这里)先下载好iso镜像文 ...
- 二、hexo+github搭建个人博客的简单使用
使用hexo+github搭建一个可以外网访问的个人博客,此文用于记录博客初级的使用方法. 新建-编写-生成-部署文章的全过程 1.使用cmd完成 打开命令提示符[win+r输入cmd] 切换到自己本 ...
- Markdown
Cygwin Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown具有一系列衍生版本,用于扩展Markdown ...
- SOTA激活函数学习
除了之前较为流行的RELU激活函数,最近又新出了几个效果较好的激活函数 一.BERT激活函数 - GELU(gaussian error linear units)高斯误差线性单元 数学公式如下: X ...
- linux系统shell基础知识入门二
条件判断语句 test或[],这两是等价的.但用[]这种可能看起来更简洁 必须在[符号和检查条件之间留出空格,而test命令之后也总是应该有一个空格 如果要把test 和then 放一行上,那么必须在 ...