`
asdqweaa
  • 浏览: 1033 次
  • 性别: Icon_minigender_1
  • 来自: 醴陵
文章分类
社区版块
存档分类
最新评论

oracle sqlldr上传函数应用

    博客分类:
  • JAVA
阅读更多

最近在使用SQLLDR解析上传的时候遇到问题-多个不同文件汇总到一个表中,其中有多个数据关联,要使用到自定义函数,且关联的多个字段计算后只保存结果,网上很多资料都没有找到合适的例子,相信很多童鞋有过类似的经历。自己摸索后特发一帖一解百优,希望对大家有帮助,上例子!

 

直接贴出这段生成的JAVA代码:

 

StringBuilder sb = new StringBuilder();

                                //从0行读取

sb.append("Options (Skip=0) \n");  

sb.append("LOAD DATA\r\n ");

                                //设置数据库存储字符编码

sb.append("CHARACTERSET ZHS16GBK  \r\n");

                                //读取映射文件路径及名称

sb.append("INFILE '"+ txtFilePath + "infos"+".dat' \r\n");

//这里是用APPEND 会直接插入到数据库中原先的数据不会动

                                sb.append("APPEND\r\n "); 

                                数据库表名

sb.append("INTO TABLE p_table"+"\r\n ");

sb.append("TRAILING NULLCOLS\r\n ");

sb.append("(\r\n ");

//插入1表中的数据  此表使用sequences自动增长 使用自定义函数获得主键ID增长量,其实也可以直接写sequences常量

sb.append("ID    \"getInfoseq()\",\r\n ");

                                //使用CONSTANT 直接插入传入过来的bizDate值,数据库直接保存bizDate

sb.append("BIZ_DATE    CONSTANT '"+bizDate+"',\r\n ");

                                //POSITION是取文件中的字符166-173使用GBK的编码不需要考虑中文占位问题,如果是中文的话直接会按两位来读取,其余的编码可能需要转码

sb.append("col    POSITION(166:173),\r\n ");

sb.append("time  POSITION(157:164) \"to_date(:time,'yyyymmdd')\",\r\n ");

sb.append("A    POSITION(73:87),\r\n ");

                                //这里自定义函数使用了A,T字段

sb.append("T    POSITION(43:46) \"replacetrnc(:T,:A)\",\r\n ");

//插入3表中的数据  使用两个函数计算

sb.append("money    POSITION(485:492) \"nvl(getmoney(:money),0)\",\r\n");

//插入4表中的数据

sb.append("CORT    POSITION(890:894) \"getcort1(:CORT)\",\r\n ");

sb.append("COAM    \"getCoam(nvl(getmoney(:FARE),0),getcort1(:CORT))\",\r\n ");

sb.append("CORT_2    POSITION(912:916) \"getcort2(:CORT_2)\",\r\n ");

                                //这里自定义函数需要注意,我需要的是money这个字段函数转后的值所以要嵌套函数转换

sb.append("COAM_2    POSITION(917:927) \"getCoam(nvl(getmoney(:money),0),getcort2(:CORT_2))\",\r\n ");

sb.append(") ");

 

分享也差不多,不知道大家有没明白,也就是存入数据的数据要使用to_Date  to_number 等函数的时候,可以直接接在当前字段后面 并不需要先插入某个值后在转

 例如数据的字段标示是  time :20121201 1-8位字符 但是我存入后的字段是DATE

可以直接这样写  date postion(1,8) "to_date(:date,'yyyymmdd')"  这里比原来的

time   postion(1,8);

date  "to_date(:date,'yyyymmdd')"  ; 

 

 节省了一个字段,减少表空间冗余。

 

顺便分享下网上找来的资料

分享到:
评论

相关推荐

    oracle sqlldr 导入乱码问题

    4. 使用转换函数:在某些情况下,可以在SQL*Loader控制文件中使用转换函数,如`CHARSET AD转化函数`,来转换数据的编码。例如: ``` LOAD DATA INFILE 'data.txt' INTO TABLE my_table ... FIELDS TERMINATED...

    Oracle sqlldr导入一个日期列实例详解

    Oracle SQL*Loader(sqlldr)是Oracle数据库提供的一种强大的数据加载工具,用于将大量数据从文本文件快速导入到数据库表中。在这个实例中,我们将详细探讨如何使用SQL*Loader导入包含日期列的数据。 首先,我们...

    sqlldr例子

    SQL*Loader(简称sqlldr)是Oracle数据库系统中一个强大的数据加载工具,它可以从外部文件高效地批量导入数据到数据库中。这篇博文将详细介绍sqlldr的使用实例,帮助你理解和掌握这一工具,以便在实际工作中更有效地...

    D:\sqluldr2\sqlldr(linux+windows).rar

    在标题提及的`sqlldr(linux+windows).rar`压缩包中,包含了适用于Linux和Windows操作系统的SQL*Loader工具,以及可能的使用案例和教程,使得用户无论在哪个操作系统环境下都能进行数据的快速上传。 **1. SQL*Loader...

    sqlldr_所有命令及用法

    SQL*Loader,简称sqlldr,是Oracle数据库系统中用于快速加载大量数据到数据库的一个实用工具。它是Oracle Data Pump的一部分,提供了高效的数据导入功能,适用于批量处理大数据量的场景。 1. **sqlldr简介** SQL*...

    sqlldr报超出字符长度错误

    在这里,通过使用`to_date`函数将文本数据转换为日期类型,并指定了日期格式。这种方法适用于日期类型的字段,确保数据能正确导入。 4. **检查源文件:** 对于所有使用SQL*Loader的场景,都应该仔细检查源文件,...

    Oracle官方32位客户端-instantclient-basic-nt-12.1.0.2.0

    1. **oci.dll**: Oracle Call Interface (OCI) 是Oracle数据库的主要应用程序编程接口(API),用于在C/C++等语言中与数据库进行交互。oci.dll是OCI的动态链接库,提供了一整套函数来执行SQL查询、事务处理、游标...

    Oracle向Greenplum移植

    例如,处理日期比较时,Greenplum推荐使用`date_trunc`函数;而处理复杂的查询和连接时,建议将多个SQL合并为一个,以减少I/O操作,提升性能。避免使用`EXISTS`和`NOT IN`语法,因为它们可能在分布式环境中导致不必...

    Oracle大数据量数据导入导出示例

    - **时间格式转换**:使用 `to_char()` 函数将日期转换成字符串格式,以便于后续导入。 3. **执行SQL文件**: - 在PL/SQL Developer中,通过 `@f:\export.sql` 来执行SQL文件。这种方式可以简化多条SQL语句的执行...

    Oracle数据库管理与开发培训

    - 使用DBCA工具进行创建,指定`OracleSID`。 - **Oracle目录结构**: - `Oracle_Base`:Oracle安装的基础目录。 - `Oracle_Home`:Oracle的具体安装路径。 - `Oracle_Home\bin`:包含Oracle的可执行文件,需要...

    oracle和sql server

    - Oracle支持使用`TRUNC`函数来截断数值,例如:`SELECT TRUNC(15.79, 1) FROM DUAL;`,这里返回的结果为15.7。 - SQL Server则提供了`ROUND`和`FLOOR`等函数来处理数值的截断或四舍五入操作。 #### 三、总结 ...

    Oracle数据库装载外部数据工具SQL*Loader的应用.pdf

    例如,可以指定使用或不使用特定的字段转换、记录过滤以及对特定字段应用SQL函数等。SQL*Loader还支持多种错误处理选项,这包括记录在装载过程中遇到的错误,并在装载后进行修正。 最后,文章中通过一个实例来说明...

    oracle学习笔记.docx

    在Oracle学习笔记中,我们关注两个关键知识点:1) SQLLoader的使用和2) Oracle应用程序性能分析。 1. SQLLoader导入数据 SQLLoader是Oracle提供的一种高效的数据加载工具,能够将文本格式的数据批量导入到Oracle...

    oracle sqlloader使用指南.doc

    此外,SQL*Loader还允许在导入时对数据进行修改,如使用函数转换或赋值,例如: ```text LOAD DATA INFILE * INTO TABLE modified_data (rec_no "my_db_sequence.nextval", region "UPPER(:region)") ``` 这里,`...

    Oracle基础教程

    Oracle提供了多种工具,如`expdp`和`impdp`用于数据泵导出和导入,以及`sqlldr`用于SQL*Loader的数据加载。 设置现实环境变量如ORACLE_HOME、PATH和TNS_ADMIN等,是确保Oracle客户端能够正确连接到服务器的关键步骤...

Global site tag (gtag.js) - Google Analytics