最代码广告位
遇见,的gravatar头像
遇见,2014-08-15 15:58:18

分享一个ORACLE的自定义函数SQL查询学习

    之前有一个朋友让我帮他实现一个把表中的一列都转换成行的形式,之前想到用decode 但是每一列的数据是未知的,所以写了一个方法去实现,然后写好了。之后想着能不能把表里的数据全部转换,就是所有数据正常以每一列进行分类全部变成每一行进行分类。

    抱着好奇的态度开始编写方法, 考虑了很久觉得这个数据未知性太强, 没有办法用常用的方法实现, 只能将数据拿出来用SELECT X,X,X,X FROM DUAL 形式来实现。实现过程中也是问题不断, 但是后来听一个朋友说这个很像是百度公司的面试题, 果断下定了决心一定要完成。最后实现效果入下图。

SELECT COL2ROW_ALL('USERMARK', 'NAME') FROM DUAL;

两个参数, 第一个参数是表名, 第二个参数是表头要显示的列数据的字段名。

转换前 列分类:

分享一个ORACLE的自定义函数SQL查询学习

转换后 行分类:

分享一个ORACLE的自定义函数SQL查询学习

虽然方法还是实现了,但是还是有点问题,就是因为这个是拼SQL实现的方法,所以如果你的表数据很多就会出现SQL超长, 而oracle10G如果你的字符串超过32K,open cursor for vsql 就会抛错了(而且oracle10g open cursor for后不支持clob。。),但是如果是oracle11的话open cursor for 后面就可以用clob了 应该就没有这个问题了。

这个方法具体开发中没太大作用,只是自己写着玩玩。分享的目的是让大家遇到困难不要放弃,当你遇到困难是总有动力会驱使你战胜它的。

具体的方法实现我都有写注释。 大家没事的时候可以看看哦。

大家测试的时候如果是oracle10g尽可能用数据比较少的表来测试,不然会抛错。如果是oracle11就无所谓了但是需要把存放SQL的变量改成CLOB就可以了。


打赏

文件名:COL2ROW_ALL.zip,文件大小:1.582K下载
  • /
    • /COL2ROW_ALL.fnc
最代码最近下载分享源代码列表最近下载
cxdxfx12 LV102019年7月7日
月亮月亮星星星星
foreveryou LV72019年6月24日
月亮星星星星星星
nbzhou2013 LV92019年1月10日
月亮月亮星星
lishenhao LV12018年7月13日
星星
程小猿 LV142018年4月20日
月亮月亮月亮星星星星
jic499 LV272018年4月17日
太阳月亮月亮星星星星星星
遇见, LV362018年2月5日
太阳太阳月亮
zy68141927 LV92017年11月15日
月亮月亮星星
azsxd222 LV12016年11月29日
星星
zhou357yi LV12016年8月23日
星星
最代码最近浏览分享源代码列表最近浏览
大风起兮大风起 LV25月20日
星星星星
amazing233 LV14月16日
星星
0312wangchen LV244月15日
太阳月亮月亮
13102805352li3月13日
暂无贡献等级
longyin2018 LV143月6日
月亮月亮月亮星星星星
wkc LV182月23日
太阳星星星星
8443803462月7日
暂无贡献等级
ls16567188491月13日
暂无贡献等级
czr2233 LV81月4日
月亮月亮
mmmzzzwww LV22019年12月9日
星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友