遇见,的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  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日
最代码最近浏览分享源代码列表最近浏览
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日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友