coding
遇见,的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
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友