知识大全 oracle 使用杂记二
Posted 知
篇首语:书到用时方恨少,事非经过不知难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle 使用杂记二相关的知识,希望对你有一定的参考价值。
下面的是关于sql*loader 的使用的一点总结 有些是来自itpub上的一些网友的总结 大部分是oracle专家高级编程上的实例 只是我实践以后写的结果 sqlldr userid=lgone/tiger control=a ctl LOAD DATA INFILE t dat // 要导入的文件 // INFILE tt dat // 导入多个文件 // INFILE * // 要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容 INTO TABLE table_name // 指定装入的表 // into table t_name partition (p_ ) 分区的载入 BADFILE c:\\bad txt // 指定坏文件地址 ************* 以下是 种装入表的方式 APPEND // 原先的表有数据 就加在后面 // INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值 // REPLACE // 原先的表有数据 原先的数据会全部删除 // TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据 SKIP 可以用 SKIP n 关键字来指定导入时可以跳过多少行数据 ************* 指定的TERMINATED可以在表的开头 也可在表的内部字段部分 FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY // 装载这种数据: lg lg lg lg // 在表中结果: lg lg lg lg // TERMINATED BY X // 以十六进制格式 表示的 // TERMINATED BY WRITESPACE // 装载这种数据: lg lg TRAILING NULLCOLS ************* 表的字段没有对应的值时允许为空 ************* 下面是表的字段 ( col_ col_ col_filler FILLER // FILLER 关键字 此列的数值不会被装载 // 如: lg lg not 结果 lg lg ) // 当没声明FIELDS TERMINATED BY 时 // ( // col_ [interger external] TERMINATED BY // col_ [date dd mon yyy ] TERMINATED BY // col_ [char] TERMINATED BY OPTIONALLY ENCLOSED BY lg // ) // 当没声明FIELDS TERMINATED BY 用位置告诉字段装载数据 // ( // col_ position( : ) // col_ position( : ) // col_ position(*: ) // 这个字段的开始位置在前一字段的结束位置 // col_ position( : ) // col_ position( : ) char( ) // 指定字段的类型 // ) BEGINDATA // 对应开始的 INFILE * 要导入的内容就在control文件里 Sql what lg show ===================================================================================== //////////// 注意begindata后的数值前面不能有空格 ***** 普通装载 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY (DEPTNO DNAME LOC ) BEGINDATA Sales USA Accounting Virginia USA Consulting Virginia Finance Virginia Finance Virginia // loc 列将为空 Finance Virginia // loc 列将为空 ***** FIELDS TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x 的情况 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x (DEPTNO DNAME LOC ) BEGINDATA Sales Virginia ***** 指定不装载那一列 还可用 POSTION(x:y) 来分隔数据 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY ( DEPTNO FILLER_ FILLER // 下面的 Something Not To Be Loaded 将不会被装载 DNAME LOC ) BEGINDATA Something Not To Be Loaded Accounting Virginia USA ***** position的列子 LOAD DATA INFILE * INTO TABLE DEPT REPLACE ( DEPTNO position( : ) DNAME position(*: ) // 这个字段的开始位置在前一字段的结束位置 LOC position(*: ) ENTIRE_LINE position( : ) ) BEGINDATA Accounting Virginia USA ***** 使用函数 日期的一种表达 TRAILING NULLCOLS的使用 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应 // 的列的值的 如果第一行改为 Sales Virginia / / 就不用TRAILING NULLCOLS了 (DEPTNO DNAME upper(:dname) // 使用函数 LOC upper(:loc) LAST_UPDATED date dd/mm/yyyy // 日期的一种表达方式 还有 dd mon yyyy 等 ENTIRE_LINE :deptno||:dname||:loc||:last_updated ) BEGINDATA Sales Virginia / / Accounting Virginia / / Consulting Virginia / / Finance Virginia / / ***** 使用自定义的函数 // 解决的时间问题 使用函数这仅适合于常规导入 并不适合 direct导入方式 i可能可以 create or replace function my_to_date( p_string in varchar ) return date as type fmtArray is table of varchar ( ); l_fmts fmtArray := fmtArray( dd mon yyyy dd month yyyy dd/mm/yyyy dd/mm/yyyy hh :mi:ss ); l_return date; begin for i in unt loop begin l_return := to_date( p_string l_fmts(i) ); exception when others then null; end; EXIT when l_return is not null; end loop; if ( l_return is null ) then l_return := new_time( to_date( ddmmyyyy ) + / / / * p_string GMT EST ); end if; return l_return; end; / LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) // 使用自定义的函数 ) BEGINDATA Sales Virginia april Accounting Virginia / / Consulting Virginia / / : : Finance Virginia Finance Virginia apr Finance Virginia Not a date ***** 合并多行记录为一行记录 LOAD DATA INFILE * concatenate // 通过关键字concatenate 把几行的记录看成一行记录 INTO TABLE DEPT replace FIELDS TERMINATED BY (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED date dd/mm/yyyy ) BEGINDATA Sales // 其实这 行看成一行 Sales Virginia / / Virginia / / // 这列子用 continueif list= 也可以 告诉sqlldr在每行的末尾找逗号 找到逗号就把下一行附加到上一行 LOAD DATA INFILE * continueif this( : ) = // 找每行的开始是否有连接字符 有就把下一行连接为一行 // 如 Sales Virginia // / / 就是一行 Sales Virginia / / // 其中 : 表示从第一行开始 并在第一行结束 还有continueif next 但continueif list最理想 INTO TABLE DEPT replace FIELDS TERMINATED BY (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED date dd/mm/yyyy ) BEGINDATA // 但是好象不能象右面的那样使用 Sales Virginia Sales Virginia / / / / Finance Virginia / / Finance Virginia / / ================================ 用别的语言帮助解决的方法 txt文件中的每 行作为一个记录插入到数据库中的一条记录 文件是定长的 插入数据记录是 可以把换行符作为一个分隔符来处理 到去下载一个activeperl MSI 安装 PERL 你的文本文件示例 test old a b c d e f g 我的PERL程序 test pl $mycount= ; open(FILE_OLD TEST OLD ); open(FILE_NEW >TEST NEW ); while(<FILE_OLD>) chomp; if ($mycount% == ) print FILE_NEW $_ ; else print FILE_NEW $_ \\n ; $mycount++; 在命令窗口下执行 perl test pl 得到一个新的文本文件 test new 内容如下 a b c d e f g load data infile test txt concatenate( ) into table aa fields terminated by whitespace (FIELD FIELD FIELD FIELD FIELD FIELD FIELD ) ============================================================== ***** 载入每行的行号 load data infile * into table t replace ( seqno RECNUM //载入每行的行号 text Position( : )) BEGINDATA fsdfasj //自动分配一行号给载入 表t 的seqno字段 此行为 fasdjfasdfl // 此行为 ***** 载入有换行符的数据 注意: unix 和 windows 不同 \\\\n & /n 还可以用 dbms_lob 和 bfile 看一个文件的回车 换行 等其他特殊字符 < > 使用一个非换行符的字符 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) MENTS replace(:ments \\n chr( )) // replace 的使用帮助转换换行符 ) BEGINDATA Sales Virginia april This is the Sales\\nOffice in Virginia Accounting Virginia / / This is the Accounting\\nOffice in Virginia Consulting Virginia / / : : This is the Consulting\\nOffice in Virginia Finance Virginia This is the Finance\\nOffice in Virginia < > 使用fix属性 LOAD DATA INFILE demo dat fix INTO TABLE DEPT REPLACE FIELDS TERMINATED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) MENTS ) demo dat Sales Virginia april This is the Sales Office in Virginia Accounting Virginia / / This is the Accounting Office in Virginia Consulting Virginia / / : : This is the Consulting Office in Virginia Finance Virginia This is the Finance Office in Virginia // 这样装载会把换行符装入数据库 下面的方法就不会 但要求数据的格式不同 LOAD DATA INFILE demo dat fix INTO TABLE DEPT REPLACE FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) MENTS ) demo dat Sales Virginia april This is the Sales Office in Virginia Accounting Virginia / / This is the Accounting Office in Virginia Consulting Virginia / / : : This is the Consulting Office in Virginia Finance Virginia This is the Finance Office in Virginia < > 使用var属性 LOAD DATA INFILE demo dat var // 告诉每个记录的前 个字节表示记录的长度 如第一个记录的 表示此记录有 个字节 INTO TABLE DEPT REPLACE FIELDS TERMINATED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) MENTS ) demo dat Sales Virginia april This is the Sales Office in Virginia Accounting Virginia / / This is the Accounting Office in Virginia Consulting Virginia / / : : This is the Consulting Office in Virginia Finance Virginia This is the Finance Office in Virginia < > 使用str属性 // 最灵活的一中 可定义一个新的行结尾符 win 回车换行 : chr( )||chr( ) 此列中记录是以 a|\\r\\n 结束的 select utl_raw cast_to_raw( | ||chr( )||chr( )) from dual; 结果 C D A LOAD DATA INFILE demo dat str X C D A INTO TABLE DEPT REPLACE FIELDS TERMINATED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) MENTS ) demo dat Sales Virginia april This is the Sales Office in Virginia| Accounting Virginia / / This is the Accounting Office in Virginia| Consulting Virginia / / : : This is the Consulting Office in Virginia| Finance Virginia This is the Finance Office in Virginia| ***** 将数据导入多个表 LOAD DATA INFILE * REPLACE INTO TABLE emp WHEN empno != ( empno POSITION( : ) INTEGER EXTERNAL ename POSITION( : ) CHAR deptno POSITION( : ) CHAR mgr POSITION( : ) INTEGER EXTERNAL ) INTO TABLE proj WHEN projno != ( projno POSITION( : ) INTEGER EXTERNAL empno POSITION( : ) INTEGER EXTERNAL ) ***** 转载 RAW 数据 或 转载长字段 options(bindsize= rows= ) load data infile my data fix // * = 是小于 K 的最大因子 concatenate preserve blanks into table foo append (id constant bigdata raw( )) ***** 转载 LOB 数据 用 dbms_lob dbms的数据要在服务器上 通过网络的不行 drop table demo; create or replace directory dir as c:\\temp\\ ; create or replace directory dir as c:\\temp\\ ; create table demo ( id int primary key theClob clob ) / host echo Hello World\\! > c:\\temp\\test txt declare l_clob clob; l_bfile bfile; begin insert into demo values ( empty_clob() ) returning theclob into l_clob; l_bfile := bfilename( DIR test txt ); DIR 要大写 dbms_lob fileopen( l_bfile ); dbms_lob loadfromfile( l_clob l_bfile dbms_lob getlength( l_bfile ) ); dbms_lob fileclose( l_bfile ); end; / select dbms_lob getlength(theClob) theClob from demo / 用 sqlldr 在同一行的LOB lob数据在同一个数据文件中 LOAD DATA INFILE demo dat str X C D A INTO TABLE DEPT REPLACE FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY TRAILING NULLCOLS (DEPTNO DNAME upper(:dname) LOC upper(:loc) LAST_UPDATED my_to_date( :last_updated ) MENTS char( ) ) Sales Virginia april This is the Sales Office in Virginia| Accounting Virginia / / This is the Accounting Office in Virginia| Consulting Virginia / / : : This is the Consulting Office in Virginia| Finance Virginia This is the Finance Office in Virginia it has embedded mas and is much longer then the other ments field If you feel the need to add double quoted text in here like this: You will need to double up those quotes! to preserve them in the string This field keeps going for upto bytes or until we hit the magic end of record marker the | followed by a end of line it is right here > | 用 sqlldr 不在同一行的LOB 就是lob数据在单独的文件中 create table lob_demo ( owner varchar ( ) timestamp date filename varchar ( ) text clob ) / LOAD DATA /////////// window 的 INFILE * REPLACE INTO TABLE LOB_DEMO ( owner position( : ) timestamp position( : ) to_date(:timestamp|| m mm/dd/yyyy hh:miam ) filename position( : ) 下面的LOB的filename是从这里来的 text LOBFILE(filename) TERMINATED BY EOF ) BEGINDATA / / : p BUILTIN\\Administrators demo log // 这是 windows 下面的情况 上面的数据是用 dir /q/n 看见的情况 ******* ///// unix 下的情况 用 ls l 得到上面数据的情况 控制文件就改下时间的格式 lob 到对象列 create table image_load( id number name varchar ( ) image ordsys ordimage ) / desc ordsys ordimage desc ordsys ordsource LOAD DATA INFILE * INTO TABLE T replace fields terminated by ( id name fiel_name filler image column object ( source column object ( localdatalobfile(file_name) terminated by bof nullif file_name= NONE ) ) ) begindata icons icons gif ***** 转载varrays /嵌套表 create type myArrayType as varray( ) of number( ) / create table t ( x int primary key y myArrayType ) / LOAD DATA INFILE * INTO TABLE T replace fields terminated by ( x y_cnt FILLER y varray count (y_cnt) ( y ) ) BEGINDATA create or replace type myTableType as table of number( ) / create table t ( x int primary key y myTableType ) nested table y store as y_tab / LOAD DATA INFILE * INTO TABLE T replace fields terminated by ( x y nested table count (CONSTANT ) ( y ) ) BEGINDATA ============================================================================== 象这样的数据 用 nullif 子句 jan Flipper seemed unusually hungry today jan Spread over three meals id position( : ) nullif id=blanks // 这里可以是blanks 或者别的表达式 // 下面是另一个列子 第一行的 在数据库中将成为 null LOAD DATA INFILE * INTO TABLE T REPLACE (n position( : ) integer external nullif n= v position( : ) ) BEGINDATA lg 如果是英文的日志 格式 可能需要修改环境变量 nls_lang or nls_date_format cha138/Article/program/Oracle/201311/17716相关参考
Oracle学习手册:Oracle游标使用大全二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Oracle备份与恢复案例二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 检查数据库的数据(完
Oracle安全全程接触(完整版)二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ()SQL*
数据库手册:Oracle维护常用SQL语句二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 回滚
知识大全 ORACLE性能诊断―学习statspack笔记(二)
ORACLE性能诊断―学习statspack笔记(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
ORACLE常用傻瓜问题1000问全集(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何
小议Oracle11g的自治事务(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自治事务实
怎么再Oracle中进行读锁(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这一篇介绍一种
Oracle数据库常见问题答疑二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 问利用QUERY
Oracle数据库开发的一些经验积累(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 三LI