用分析函数实现自动生成sqlloader定长数据装载控制文件的一个语句
2013-02-05 15:27
561 查看
本文中的内容在《2010-05-07 22:08 Automatic SQL*LOADER(以定长方式为例) ,原文地址:http://hi.baidu.com/nsj820/item/b346e517416d43011994ec5c》也能实现,但这里主要想体现的是oracle分析函数的强大。
用到的知识点
1、oracle分析函数
1.1、偏移函数lead
1.2、sum()over(PARTITION by order by)连续求和的使用
2、union all的排序
使用union all不能任意排序,只能按两个union all的内容都有的字段进行排序;排序是对union all后的整体结果进行排序,而非其某一部分。
3、此代码可以实现sqlloader定长数据装载控制文件的编写
当然,用oracle游标也能实现;但本文中的方法相对简单一些。
WITH FIX_LENGTH AS (SELECT A.TABLE_NAME, A.COLUMN_ID, A.COLUMN_NAME, A.DATA_LENGTH, SUM(P_OFFSET) OVER(PARTITION BY A.TABLE_NAME ORDER BY A.COLUMN_ID) P_START, SUM(P_OFFSET) OVER(PARTITION BY A.TABLE_NAME ORDER BY A.COLUMN_ID) + DATA_LENGTH - 1 P_END FROM (SELECT A.TABLE_NAME, A.COLUMN_ID, A.COLUMN_NAME, A.DATA_LENGTH, LAG(A.DATA_LENGTH, 1, 1) OVER(PARTITION BY A.TABLE_NAME ORDER BY A.COLUMN_ID) P_OFFSET, SUM(A.DATA_LENGTH) OVER(PARTITION BY A.TABLE_NAME ORDER BY A.COLUMN_ID) P_CONTINUOUS_SUMMATION FROM USER_TAB_COLUMNS A) A) SELECT DISTINCT 'LOAD DATA INFILE * INTO TABLE ' || TABLE_NAME || ' REPLACE' FROM USER_TAB_COLUMNS WHERE TABLE_NAME = &TAB_NAME UNION ALL SELECT * FROM (SELECT DECODE(COLUMN_ID, 1, '(', '') || COLUMN_NAME || ' POSITION(' || P_START || ':' || P_END || ')' || DECODE(COLUMN_ID, MAX(COLUMN_ID) OVER(PARTITION BY TABLE_NAME), ')', ',') FROM FIX_LENGTH WHERE TABLE_NAME = &TAB_NAME ORDER BY TABLE_NAME, COLUMN_ID);
用到的知识点
1、oracle分析函数
1.1、偏移函数lead
1.2、sum()over(PARTITION by order by)连续求和的使用
2、union all的排序
使用union all不能任意排序,只能按两个union all的内容都有的字段进行排序;排序是对union all后的整体结果进行排序,而非其某一部分。
3、此代码可以实现sqlloader定长数据装载控制文件的编写
当然,用oracle游标也能实现;但本文中的方法相对简单一些。
相关文章推荐
- 一个生成COBOL测试数据的小程序——分析COBOL中数据声明的语句
- 编写一个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
- 一个自动生成Hibernate ORM映射文件的工具函数
- 在家看孩子,10分钟生成一个业务管理系统【能支持多数据库,大数据,流程审批,权限控制,即时提醒】,视频讲解详细实现步骤
- 自动生成控制文件及数据文件并完成sqlldr的自动导入
- 用groovy简化java反射编写一个基于行数据对象的自动生成excel文件对象的工具
- Oracle Class2. SQL查询和SQL函数(Oracle数据类型,ddl,dml,dcl,事务控制语言tcl,sql操作符,sql函数,select语句,运算符,分析函数,临时表)
- 用js实现的一个根据内容自动生成表格的函数
- 自动生成sqlloader的控制文件
- 怎样将数据同时插入两个表中(事物开始后,插入语句后,自动增长列有没有生成一个值,有的话,值怎样获得)
- 用js实现的一个根据内容自动生成表格的函数
- C++写日志源代码分析,可实现根据日期自动创建文件夹、日志分类、文件大小控制等
- 禁止hibernate启动是自动生成CRUD语句和hibernate实现命名约定
- 一个smart工作流管理系统自动生成的页面和数据的效果示意图
- Enterprise Solution 生成实体数据访问接口与实现类型 Code Smith 6.5 模板文件下载
- 输入一个数据,自动算出相关的第二个数据,javascript实现
- 第三章(基本概念——语法,数据类型,流程控制语句,函数)
- 笔记:一个操作系统的实现第一章boot.asm文件分析
- ROS知识(16)----如何编译时自动链接同一个工作空间的其他包的头文件(包含message,srv,action自动生成的头文件)
- 用尽量少的语句和C语言关键字实现一个函数