遇见,
2014-08-15 15:58:18
分享一个ORACLE的自定义函数SQL查询学习
之前有一个朋友让我帮他实现一个把表中的一列都转换成行的形式,之前想到用decode 但是每一列的数据是未知的,所以写了一个方法去实现,然后写好了。之后想着能不能把表里的数据全部转换,就是所有数据正常以每一列进行分类全部变成每一行进行分类。
抱着好奇的态度开始编写方法, 考虑了很久觉得这个数据未知性太强, 没有办法用常用的方法实现, 只能将数据拿出来用SELECT X,X,X,X FROM DUAL 形式来实现。实现过程中也是问题不断, 但是后来听一个朋友说这个很像是百度公司的面试题, 果断下定了决心一定要完成。最后实现效果入下图。
SELECT COL2ROW_ALL('USERMARK', 'NAME') FROM DUAL;
两个参数, 第一个参数是表名, 第二个参数是表头要显示的列数据的字段名。
转换前 列分类:
转换后 行分类:
虽然方法还是实现了,但是还是有点问题,就是因为这个是拼SQL实现的方法,所以如果你的表数据很多就会出现SQL超长, 而oracle10G如果你的字符串超过32K,open cursor for vsql 就会抛错了(而且oracle10g open cursor for后不支持clob。。),但是如果是oracle11的话open cursor for 后面就可以用clob了 应该就没有这个问题了。
这个方法具体开发中没太大作用,只是自己写着玩玩。分享的目的是让大家遇到困难不要放弃,当你遇到困难是总有动力会驱使你战胜它的。
具体的方法实现我都有写注释。 大家没事的时候可以看看哦。
大家测试的时候如果是oracle10g尽可能用数据比较少的表来测试,不然会抛错。如果是oracle11就无所谓了但是需要把存放SQL的变量改成CLOB就可以了。
猜你喜欢
请下载代码后再发表评论
![最代码相关代码源代码列表](https://static.zuidaima.com/resource/img/heart_ico.png)
![最代码最近下载分享源代码列表](https://static.zuidaima.com/resource/img/heart_ico.png)
cxdxfx12 LV14
2019年7月7日
foreveryou LV7
2019年6月24日
nbzhou2013 LV14
2019年1月10日
lishenhao LV1
2018年7月13日
程小猿 LV14
2018年4月20日
jic499 LV27
2018年4月17日
遇见, LV36
2018年2月5日
zy68141927 LV9
2017年11月15日
azsxd222 LV1
2016年11月29日
zhou357yi LV1
2016年8月23日
![最代码最近浏览分享源代码列表](https://static.zuidaima.com/resource/img/cattle_ico.png)
yu1064549231 LV1
2023年9月20日
lironggang LV38
2023年3月28日
woaikaikai LV2
2022年10月26日
zgd_suny LV7
2022年6月21日
cenj12700 LV5
2021年4月21日
MIAOHUA LV6
2021年3月7日
liudcc LV5
2021年1月19日
yuzhiyuan1977 LV2
2021年1月5日
yj37297492 LV1
2020年8月11日
han001
2020年7月15日
暂无贡献等级