[oracle]百思不得其解:wmsys.wm_concat的用法与数据库版本的问题
2017-01-21 15:16
591 查看
[quote=引用 楼主 lemonran 的回复:]
oracle10g以上版本提供行转列组合成字符串函数wmsys.wm_concat
例如有个users表如下:
id yhm xm
1 001 小唐
2 002 小李
3 003 小张
select wmsys.wm_concat(yhm) 用户名, wmsys.wm_concat(xm) 姓名 from users
执行结果为:
用户名 姓名
001,002,003 小唐,小李,小张
很方便,自己写绝对比这复杂得多!
这个是我在网上百度的,他的用法跟我想要的效果类似,然后我就用在了我自己的Sql里面。
昨天有用户说有一个页面访问不了了。
就报了后台就报错了:
ORA-00600: 内部错误代码, 参数: [kokegPinLob1], [], [], [], [], [], [], []
在网上百度了好久也没有找到解决方法。
然后在网上找到了这篇文章警示:通过 wmsys.wm_concat 实现行列转换。
http://www.eygle.com/archives/2012/10/wmsys_wm_concat.html
我的本机的oracle版本是10.2.0.3.0,服务器上用的是10.2.0.5.0。
服务器上用wm_concat 函数得到的字段就是clob类型的,本机上面的是正常的。
程序在本机上面运行很正常,完全没有问题,查询也可以查出来。就是在服务器上页面显示不出来。org.hibernate.exception.GenericJDBCException: could not execute query
今天同事说把order by id desc 去掉了就可以了访问那个查询页面了。
这是什么原因。
难道用了wm_concat 这个函数的select语句,不能随便用order by?求解!!!!!
[/quote]
[quote=引用 4 楼 wildwave 的回复:]
[quote=引用 2 楼 hidanger521 的回复:]
[quote=引用 1 楼 lemonran 的回复:]
怎么都没有回复呢?[/quote]
10.2.0.4以后,wmsys.wm_concat返回值为blob类型,需要转为字符串。。[/quote]
应该是,10.2.0.4以前,是varchar2,10.2.0.5开始,是CLOB
这是一个bug,当lob字段和order by 同时出现时可能触发
可以打上对应的补丁,或者,只要不超过4000字节,可以加个to_char来转换成字符串试试
[/quote]
oracle10g以上版本提供行转列组合成字符串函数wmsys.wm_concat
例如有个users表如下:
id yhm xm
1 001 小唐
2 002 小李
3 003 小张
select wmsys.wm_concat(yhm) 用户名, wmsys.wm_concat(xm) 姓名 from users
执行结果为:
用户名 姓名
001,002,003 小唐,小李,小张
很方便,自己写绝对比这复杂得多!
这个是我在网上百度的,他的用法跟我想要的效果类似,然后我就用在了我自己的Sql里面。
SELECT * FROM (SELECT a.*, (SELECT wm_concat (name) FROM V WHERE parentid = a.id) typename FROM T a) ORDER BY id DESC
昨天有用户说有一个页面访问不了了。
就报了后台就报错了:
ORA-00600: 内部错误代码, 参数: [kokegPinLob1], [], [], [], [], [], [], []
在网上百度了好久也没有找到解决方法。
然后在网上找到了这篇文章警示:通过 wmsys.wm_concat 实现行列转换。
http://www.eygle.com/archives/2012/10/wmsys_wm_concat.html
我的本机的oracle版本是10.2.0.3.0,服务器上用的是10.2.0.5.0。
服务器上用wm_concat 函数得到的字段就是clob类型的,本机上面的是正常的。
程序在本机上面运行很正常,完全没有问题,查询也可以查出来。就是在服务器上页面显示不出来。org.hibernate.exception.GenericJDBCException: could not execute query
今天同事说把order by id desc 去掉了就可以了访问那个查询页面了。
这是什么原因。
难道用了wm_concat 这个函数的select语句,不能随便用order by?求解!!!!!
[/quote]
[quote=引用 4 楼 wildwave 的回复:]
[quote=引用 2 楼 hidanger521 的回复:]
[quote=引用 1 楼 lemonran 的回复:]
怎么都没有回复呢?[/quote]
10.2.0.4以后,wmsys.wm_concat返回值为blob类型,需要转为字符串。。[/quote]
应该是,10.2.0.4以前,是varchar2,10.2.0.5开始,是CLOB
这是一个bug,当lob字段和order by 同时出现时可能触发
可以打上对应的补丁,或者,只要不超过4000字节,可以加个to_char来转换成字符串试试
[/quote]
相关文章推荐
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法
- oracle 的wmsys.wm_concat函数用法
- oracle,在一条sql语句里面的wmsys.wm_concat()、row_number()、union all 的用法
- oracle 函数WMSYS.WM_CONCAT()的用法
- 关于oracle中的wmsys.wm_concat中的使用问题
- mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()
- oracle 函数 WMSYS.WM_CONCAT 与对应 mysql 函数GROUP_CONCAT的用法
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法
- oracle之wm_concat不同版本问题
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法
- oracle 函数WMSYS.WM_CONCAT()的用法(让查询结果行转列)
- Oracle 函数 wmsys.wm_concat 的几个用法
- oracle wmsys.wm_concat用法
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法
- oracle 函数WMSYS.WM_CONCAT()的用法(行转列)
- Oracle wmsys.wm_concat()函数 顺序问题 分隔符问题
- 关于oracle中的wmsys.wm_concat中的使用问题
- Oracle wmsys.wm_concat的几个用法
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法