Oracle数据库表导出和导入csv文件操作
使用imp和exp命令对Oracle数据库进行导入导出操作详解
使⽤imp和exp命令对Oracle数据库进⾏导⼊导出操作详解这⾥导⼊导出路径都在D盘下,默认⽂件名为:example.dmpexp⽅式导出数据相关参数项如下:关键字说明默认USERID⽤户名/⼝令FULL导出整个⽂件(N)BUFFER数据缓冲区的⼤⼩OWNER导出指定的所有者⽤户名列表FILE输出⽂件(EXPDAT.DMP)TABLES导出指定的表名列表COMPRESS是否压缩导出的⽂件(Y)RECORDLENGTH IO 记录的长度GRANTS导出权限(Y)INCTYPE增量导出类型INDEXES导出索引(Y)RECORD跟踪增量导出(Y)ROWS导出数据⾏(Y)PARFILE参数⽂件名CONSTRAINTS导出限制(Y)CONSISTENT交叉表⼀致性LOG屏幕输出的⽇志⽂件STATISTICS分析对象(ESTIMATE)DIRECT直接路径(N)TRIGGERS导出触发器(Y)FEEDBACK显⽰每 x ⾏ (0) 的进度FILESIZE各转储⽂件的最⼤尺⼨QUERY选定导出表⼦集的⼦句TRANSPORT_TABLESPACE导出可传输的表空间元数据(N)TABLESPACES导出指定的表空间列表1.完全导出(选项都为默认配置)例⼦:导出mydb数据库system⽤户,密码为123456的所有数据到D:\example.dmp⽂件中expsystem/**************.12.32/mydbfile=D:\example.dmp2.只导出表结构例⼦:导出mydb数据库system⽤户,密码为123456的所有表结构到D:\example.dmp⽂件中expsystem/**************.12.32/mydbfile=D:\example.dmprows=n3.将指定⽤户下的表导出例⼦:导出mydb数据库system和sys⽤户的所有表数据到D:\example.dmp⽂件中expsystem/**************.12.32/mydbfile=D:\example.dmpowner=(system,sys)4.将指定的表导出例⼦:导出mydb数据库system⽤户下的table1和table2表数据到D:\example.dmp⽂件中expsystem/**************.12.32/mydbfile=D:\example.dmptables=(table1,table2)imp⽅式导⼊数据相关参数项如下:关键字说明默认USERID⽤户名/⼝令FULL导⼊整个⽂件(N)BUFFER数据缓冲区⼤⼩FROMUSER所有⼈⽤户名列表FILE输⼊⽂件(EXPDAT.DMP)TOUSER⽤户名列表SHOW只列出⽂件内容(N)TABLES表名列表IGNORE忽略创建错误(N)RECORDLENGTH IO记录的长度GRANTS导⼊权限(Y)INCTYPE增量导⼊类型INDEXES导⼊索引(Y)COMMIT提交数组插⼊(N)ROWS导⼊数据⾏(Y)PARFILE参数⽂件名LOG屏幕输出的⽇志⽂件CONSTRAINTS导⼊限制(Y)DESTROY覆盖表空间数据⽂件(N)INDEXFILE将表/索引信息写⼊指定的⽂件SKIP_UNUSABLE_INDEXES跳过不可⽤索引的维护(N)FEEDBACK每 x ⾏显⽰进度TOID_NOVALIDATE跳过指定类型 ID 的验证FILESIZE每个转储⽂件的最⼤⼤⼩STATISTICS始终导⼊预计算的统计信息RESUMABLE在遇到有关空间的错误时挂起RESUMABLE_NAME⽤来标识可恢复语句的⽂本字符串RESUMABLE_TIMEOUT RESUMABLE 的等待时间COMPILE编译过程, 程序包和函数(Y)STREAMS_CONFIGURATION导⼊ Streams 的⼀般元数据(Y)STREAMS_INSTANITATION导⼊ Streams 的实例化元数据(N)TRANSPORT_TABLESPACE导⼊可传输的表空间元数据TABLESPACES将要传输到数据库的表空间DATAFILES将要传输到数据库的数据⽂件TTS_OWNERS拥有可传输表空间集中数据的⽤户1.导⼊⼀个完整的库例⼦:将D:\example.dmp⽂件中的库导⼊到mydb下的system⽤户中impsystem/**************.12.32/mydbfile=D:\example.dmpfull=yignore=y到此这篇关于使⽤imp和exp命令对Oracle数据库进⾏导⼊导出操作详解的⽂章就介绍到这了,更多相关Oracle数据库exp和imp 导⼊导出内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
odu在oracle数据库中的应用
一、ODU概述1. ODU是Oracle数据库中的一种重要工具,全称为Oracle Data Unloader。
2. ODU可以用来导出Oracle数据库中的数据,可以将数据以文本格式输出到文件中。
3. ODU工具使用方便,速度快,可以用来导出大量数据,并且支持多种导出格式。
二、ODU的基本用法1. 运行ODU工具需要在命令行中输入相应的命令,如odudt和odumf命令用于导出数据库表和导出多表的数据。
2. 使用ODU可以指定导出的字段和条件,还可以选择导出的数据格式(如CSV、XML等)。
3. ODU可以通过使用参数来进行一些定制化的设置,如设置缓冲区大小、导出数据的顺序等。
三、ODU的高级应用1. ODU可以与其他数据库工具结合使用,比如通过使用ODU导出的文件,再通过SQL*Loader将数据导入到另一个数据库中。
2. ODU还可以与其他数据库之间进行数据交换,比如将Oracle数据库中的数据导出到MySQL数据库中。
3. ODU支持并行导出,可以同时导出多个表中的数据,提高了导出数据的效率。
四、ODU的优缺点分析1. 优点:a) ODU具有较高的导出速度,适用于大数据量的导出。
b) ODU支持多种导出格式,满足了不同需求的导出格式。
c) ODU的使用简单,不需要复杂的配置,适合普通用户使用。
2. 缺点:a) ODU不支持导出数据库的结构信息,只能导出数据。
b) ODU在导出大规模数据时,可能会带来一定的系统压力。
五、ODU的应用场景1. 大数据量的导出:ODU适用于需要导出大量数据的场景,如数据备份、数据迁移等。
2. 数据交换:ODU可以用于不同数据库之间的数据交换,满足不同数据库间的数据共享需求。
3. 数据报表:将Oracle数据库中的数据导出为CSV格式的文件,用于生成报表和分析数据。
六、总结1. ODU作为Oracle数据库的重要工具,具有广泛的应用价值,可以满足数据库中数据导出的需求。
Oracle数据库导入Excel表的方法-图文
Oracle数据库导入Excel表的方法-图文Writtenby彬森方法1:使用Oracle官方提供的SQLDeveloper步骤1将要导入的E某cel文档格式转换为.cv格式步骤2选择要导入的CVS文件步骤3选择导入方法与字段步骤4检查各数据列数据类型与表格是否匹配步骤5进行导入步骤6等待导入完成步骤7执行查询检验导入结果方法2使用PL/SQL的文本导入器导入步骤1将要导入的E某cel文档格式转换为.cv格式步骤2打开PL/SQL工具中的文本导入器步骤3打开文本导入器中的打开文件按钮,选择相应cv文件步骤4点击文本导入编辑器到Oracle数据的选项卡步骤5选择e某cel数据导入到Oracle那个用户的那张表下步骤6确定e某cel数据表原有字段匹配到oracle中的表格后,点击导入等待完成方法3:使用ODBC(E某cel驱动)+PL/SQL方式导入E某CEL文件步骤1打开控制面板中的管理工具,根据系统选择相应的ODBC数据源步骤2设置相应的E某cel驱动(建议选择32位)步骤3设置本次数据驱动名称,E某cel版本和E某cel文件地址设置成功后,可以在用户DSN选项卡上看到相应驱动步骤4在PL/SQL中工具中选择ODBC导入器,在“来自ODBC的数据”选项卡中,选择之前配置的E某cel驱动名称步骤5在到Oracle的数据选项卡上对要导入的用户,表进行选择,确保相应字段类型映射匹配正确步骤6点击导入,等待导入完成(CPU内存占用低再导入)数据量较大时,就要耐心等待方法4:使用ODBC(t某t+cv驱动)+PL/SQL方式导入E某CEL文件此方法与方法1类似步骤1打开控制面板中的管理工具,根据系统选择相应的ODBC数据源步骤2设置相应的t某t+cv格式驱动(建议选择32位)步骤3设置本次数据驱动名称,E某cel版本和E某cel文件地址步骤4在PL/SQL中工具中选择ODBC导入器,在“来自ODBC的数据”选项卡中,选择之前配置的cv驱动名称,连接数据库,选择cv文档之所以选择cv格式文档是因为t某t格式文档可能存在乱码,需要进行处理,这里就不再说明。
bw提取oracle数据库表的方法
bw提取oracle数据库表的方法摘要:一、简介二、BW提取Oracle数据库表的方法1.安装Oracle客户端2.连接Oracle数据库3.选择需要提取的表4.编写SQL查询语句5.提取数据6.导出数据三、注意事项四、总结正文:一、简介在数据分析领域,Business Warehouse(BW)是一个广泛使用的数据提取、转换和加载(ETL)工具。
BW能够与Oracle数据库无缝连接,方便用户从Oracle数据库中提取所需的数据。
本文将详细介绍如何使用BW提取Oracle数据库表的方法。
二、BW提取Oracle数据库表的方法1.安装Oracle客户端在使用BW连接Oracle数据库之前,需要在计算机上安装Oracle客户端。
可以从Oracle官网下载对应的客户端安装包,并根据提示进行安装。
2.连接Oracle数据库打开BW软件,在“连接”模块中选择“数据库连接”。
填写Oracle数据库的连接信息,如主机名、端口号、服务名、用户名和密码,然后点击“测试连接”。
测试成功后,点击“保存”创建连接。
3.选择需要提取的表在BW中,通过“目录”模块查看已连接的数据源。
在数据源列表中,找到需要提取的Oracle数据库表,双击打开。
在表结构界面,可以查看表的字段信息。
4.编写SQL查询语句在BW的“查询”模块中,编写SQL查询语句以获取所需数据。
例如,提取某个Oracle表的所有记录,可以使用以下SQL语句:```SELECT * FROM your_table_name;```5.提取数据在BW的“数据提取”模块中,选择刚才编写的SQL查询语句,设置提取范围、分页大小等参数。
点击“开始提取”按钮,BW会自动连接到Oracle数据库并执行SQL查询,将数据保存在临时文件中。
6.导出数据提取完成后,在BW的“数据导出”模块中,选择导出格式(如CSV、Excel等),设置导出路径和文件名。
点击“开始导出”按钮,将数据导出到指定文件。
Oracle数据库导入导出方法汇总
Oracle数据库导入导出方法:1.使用命令行:数据导出:1.将数据库TEST完全导出,用户名system密码manager导出到D:\daochu.dmp中exp system/manager@TEST file=d:\daochu.dmp full=y2.将数据库中system用户与sys用户的表导出exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)3.将数据库中的表inner_notify、notify_staff_relat导出exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)4.将数据库中的表table1中的字段filed1以"00"打头的数据导出exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面加上compress=y来实现。
数据的导入:1.将D:\daochu.dmp 中的数据导入TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmpimp aichannel/aichannel@HUST full=y file= d:\data\newsmgnt.dmp ignore=y上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上ignore=y 就可以了。
2.将d:\daochu.dmp中的表table1导入imp system/manager@TEST file=d:\daochu.dmp tables=(table1)3.不同名用户之间的数据导入:imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmplog=c:\orabackup\hkbimp.log;2.plsql:数据导出:TOOLS-Export user objects(用户对象)TOOLS-Export tables(表)数据的导入:TOOLS-Import tablesOracle Import(表) SQL Inserts(用户对象)也可以将用户对象的语句拷贝出来,粘贴到Command Window这样的好处是可以看到执行的过程。
oracle数据库导入导出命令
Oracle数据导入导出imp/exp功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。
大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。
Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接(通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端修了条路,然后数据就可以被拉过来了)这样你可以把数据导出到本地,虽然可能服务器离你很远。
你同样可以把dmp文件从本地导入到远处的数据库服务器中。
利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于在oracle 8i 中安装目录\$ora10g\BIN被设置为全局路径,该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE这俩个文件是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
数据导出:1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp 中exp system/manager@TEST file=d:\daochu.dmp full=y2 将数据库中system用户与sys用户的表导出exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)3 将数据库中的表table1 、table2导出exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
oracle select导出语句
oracle select导出语句摘要:1.Oracle 数据库简介2.Oracle 中的SELECT 语句3.使用SELECT 语句导出数据4.导出数据的方式及实例5.总结正文:Oracle 数据库是一款功能强大的关系型数据库管理系统,广泛应用于各种企业级应用中。
在Oracle 中,SELECT 语句是最常用的查询数据的方式。
除此之外,SELECT 语句还可以用于导出数据。
本文将详细介绍如何在Oracle 中使用SELECT 语句导出数据。
首先,我们需要了解Oracle 中的SELECT 语句的基本语法。
SELECT 语句用于从数据库表中查询数据,其基本语法如下:```SELECT column1, column2, ...FROM table_name;```通过指定要查询的列和表名,我们可以获取到所需的数据。
在实际应用中,我们可能需要根据需求筛选、排序或分组数据。
SELECT 语句也支持这些功能,例如:```SELECT column1, column2, ...FROM table_nameWHERE condition;``````SELECT column1, column2, ...FROM table_nameORDER BY column_name;``````SELECT column1, column2, ...FROM table_nameGROUP BY column1, column2, ...;```了解SELECT 语句的基本语法后,我们来看如何使用SELECT 语句导出数据。
在Oracle 中,可以使用以下两种方式导出数据:1.使用`导出`命令(`export`):这种方式适用于将数据导出到文件,文件格式可以是CSV、TXT 等。
```export 导出文件名=导出表名.csvSELECT * FROM 表名FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """LINES TERMINATED BY "";```2.使用`SQL*Loader`:这种方式适用于将数据导出到外部表或数据文件。
Oracle批量导出表数据到CSV文件
Oracle批量导出表数据到CSV⽂件需求:把oracle数据库中符合条件的n多表,导出成csv⽂本⽂件,并以表名.csv为⽂件名存放。
实现:通过存储过程中utl_file函数来实现。
导出的csv⽂件放⼊提前创建好的directory中。
使⽤⽅法:使⽤以下命令数据预执⾏的sql脚本select 'exec sql_to_csv(''select * from ' ||t.table_name ||''',''out_put_csv''' || ',''' || t.table_name ||'.csv'');'from user_tables t实例:exec sql_to_csv('select * from ip_role','backup/oracle/csv','ip_role.csv');重点:当使⽤⼀下的存储过程执⾏的时候,报存在相关⽬录的时候请在oracle 的启动⽂件的末尾中添加你要下载到的⽬录中例如: utl_file_dir='/backup/oracle/cvs' 到 /oracle/projuct/11.2.0/dbhome_1/init.ora ⽂件中脚本说明:sql_to_csv 存储过程名;out_put_csv数据库⽬录名称;ods_mds预定义的schema名称;存储过程代码如下:create or replace procedure chenqy.sql_to_csv(p_query in varchar2, -- plsql查询sql语句p_dir in varchar2, -- 导出的⽂件放置⽬录p_filename in varchar2 -- csv名)isl_output utl_file.file_type;l_thecursor integer default dbms_sql.open_cursor;l_columnvalue varchar2(4000);l_status integer;l_colcnt number := 0;l_separator varchar2(1);l_desctbl dbms_sql.desc_tab;p_max_linesize number := 32000;begin--open filel_output := utl_file.fopen(p_dir, p_filename, 'w', p_max_linesize);--define date formatexecute immediate 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''';--open cursordbms_sql.parse(l_thecursor, p_query, dbms_sql.native);dbms_sql.describe_columns(l_thecursor, l_colcnt, l_desctbl);--dump table column namefor i in 1 .. l_colcnt looputl_file.put(l_output,l_separator || '' || l_desctbl(i).col_name || ''); --输出表头部字段名dbms_sql.define_column(l_thecursor, i, l_columnvalue, 4000);l_separator := ',';end loop;utl_file.new_line(l_output); --输出表字段头部字段名--execute the query statementl_status := dbms_sql.execute(l_thecursor);--dump table column valuewhile (dbms_sql.fetch_rows(l_thecursor) > 0) loopl_separator := '';for i in 1 .. l_colcnt loopdbms_sql.column_value(l_thecursor, i, l_columnvalue);utl_file.put(l_output,l_separator || '' ||trim(both ' ' from replace(l_columnvalue, '"', '""')) || '');--输出表对应的表数据l_separator := ',';end loop;utl_file.new_line(l_output);--写⼊cvs⾏end loop;--close cursordbms_sql.close_cursor(l_thecursor);--close fileutl_file.fclose(l_output); exceptionwhen others then raise;end;。
Oracle数据库表导出和导入csv文件操作
Oracle数据库表导出和导入csv文件操作数据库是Oracle 9i1、导出csv文件这个十分简单,用pl/sql工具即可,首先选中要导出的表,右键选择Query data,在左侧出现的窗口中,选择Export Query Restls 选择要导出的文件类型即可,一般都导csv格式。
2、导入csv文件比喻数据库里有表t_province 字段1:province 字段2:cityCSV文件存放路径:f:\test.csv 列需与数据库保持一致还需要编写一个test.ctl文件,内容如下:load datainfile 'f:\城市.csv'into table "T_PROVINCE"fields terminated by ','(province,city)然后在cmd下,输入:sqlldr userid=clevergirl/clevergirl@ORCL_192.168.128.129 control=f:test.ctl 然后回车即可3、几个值得注意的地方一开始我是这样写的:sqlldr control=f:\test.ctl log=f:test.log报了:SQL*Loader-704: 内部错误: ulconnect: OCIServerAttach [0]ORA-12560: TNS: 协议适配器错误上网查了下,说是和环境变量有关,可以修改,但我觉得还是自己指定算了然后我怕权限不够,所以直接用sys用户登录:sqlldr userid=sys/sys@ORCL_192.168.128.129 control=f:test.ctl报了:SQL*Loader-128: 无法开始会话ORA-28009: connection to sys should be as sysdba or sysoper 上面这个换成正确的后,又报了一个SQL*Loader-941: 在描述表"t_province" 时出错ORA-04043: 对象"t_province" 不存在这个错误的问题出在ctl文件,里面的表名要大写才OK。
不同类型数据库导出数据文件格式
不同类型数据库导出数据文件格式不同的数据库系统导出数据时,通常会使用特定的文件格式来存储数据。
以下是几种常见数据库系统的数据导出文件格式:1. MySQL:默认的导出格式是 `.sql` 文件,其中包含了用于重新创建数据库结构的 SQL 语句。
使用 `mysqldump` 工具进行导出。
2. PostgreSQL:使用 `pg_dump` 工具进行导出,导出格式为 `.sql` 文件。
可以选择其他格式如 `.csv`, `.json`, `.xml` 等,但这需要安装额外的工具或插件。
3. Oracle:使用 `exp` 或 `expdp` (Data Pump) 工具进行导出,导出格式为`.dmp` 文件。
4. SQL Server:使用 `bcp` 工具或 SQL Server Management Studio 进行导出,导出格式为 `.bcp`, `.txt` 或其他自定义格式。
5. SQLite:SQLite 不像其他数据库系统那样有一个专门的“导出”工具,但可以使用 `.dump` 命令将数据库转储为 SQL 文件。
6. MongoDB:MongoDB 使用 BSON 格式存储数据,但通常导出为 JSON 格式以方便查看和使用。
可以使用 `mongoexport` 工具进行导出。
7. Cassandra (Apache Cassandra):Cassandra 的数据通常以 SSTables 的形式存储,但也可以使用工具如 `cqlsh` 的 `COPY TO` 命令导出为 CSV 或其他格式。
8. CouchDB:CouchDB 的数据存储在 JSON 格式中,通常可以直接查看或使用工具如 `curl` 进行导出。
9. Neo4j:Neo4j 使用 Cypher 作为查询语言,但通常使用 Neo4j Browser 或Neo4j Desktop 进行数据导出,导出格式为 CSV 或其他自定义格式。
两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中
两种⽅法将oracle数据库中的⼀张表的数据导⼊到另外⼀个oracle数据库中oracle数据库实现⼀张表的数据导⼊到另外⼀个数据库的表中的⽅法有很多,在这介绍两个。
第⼀种,把oracle查询的数据导出为sql⽂件,执⾏sql⽂件⾥的insert语句,如下:
第⼀步,导出sql⽂件:
第⼆步:⽤PL/Sql Developer 连接另外⼀个oracle数据库,打开这个sql⽂件,全选所有insert语句,执⾏所有插⼊sql语句即可:
这种⽅法试⽤于插⼊⼤多数的数据库,⽆论是oracle数据库还是sql server数据库都可执⾏这个sql⽂件(全是insert语句)。
缺点是:当数据量⼤的时候,oracle数据库执⾏这些insert语句,效率会很低。
于是,接下来介绍第⼆种导⼊数据的⽅法,即:导出/导⼊CSV⽂件。
第⼀步,在Pl/Sql Developer查询窗⼝查询数据,导出成CSV⽂件:
导出的csv⽂件如下图:
第⼆步,把这个csv⽂件⾥的数据导⼊到另外⼀个数据库⾥,⽤PL/Sql Developer 连接另外⼀个oracle数据库,
菜单-⼯具-⽂本导⼊器:
第三步,点击“⽂本导⼊器”窗⼝⾥,点击导⼊按钮:
第四步,选择导⼊CSV⽂件:
导⼊后,界⾯如下:
第五步,选择“到Oracle的数据”选项卡,点击下拉框选择“所有者”,点击下拉框选择要导⼊的表,选择“覆盖重复”,点击“导⼊”按钮:
导⼊成功⼊下图:
点击“关闭“按钮,新建查询窗⼝,查询数据,验证导⼊是否成功:
总结:如果是oracle数据库,推荐使⽤第⼆种⽅法,⽐第⼀种⽅法的效率⾼很多。
Csv格式大数据导入oracle方法
Csv格式数据导入oracle方法SQLLOAD命令导入oracle数据库表结构:create table scott.dept_test(deptno number(2),dname varchar2(14),sloc varchar2(13))dept_test.csv'文件中的容:10,Sales,Virginia20,"Accou,nting",Virginia30,Consulting,Virginia40,Finance,Virginia当前文件存放路径:>sqlldruserid=用户名/密码[数据库字符串]control=控制文件sqlldr userid='sys/admin as sysdba' control=e:\oracle\data\control.ctlcontrol.ctl控制文件中的容load datainfile 'E:\oracle\data\dept_test.csv'append into table scott.dept_testfields terminated by ','optionally enclosed by '"'(deptno,dname,sloc)备注:loaddata:控制文件标识infile'E:\oracle\data\dept_test.csv':需要输入的数据文件名appendinto table scott.dept_test:向表中进行数据操作fieldsterminated by ',':字段终止符X'09'表示TAB键csv文件用,表示,txt文件两者都可optionallyenclosed by '"' :字段取值符比如csv文件有一个字段包含逗号,但是解析的时候又要按逗号解析,这个时候就要加上这个值(deptno,dname,sloc):表结构--insert为缺省方式,在数据装载的时候要求表为空,否则退回--append向表中添加新纪录--replace删除旧纪录,替换成新装载的纪录--truncat同上PL/SQL实现CSV数据导入到ORACLE在将csv文件导入到oracle数据库前,需要在oracle中先建立一与导入表数据结构相同的表。
【IT专家】转载:利用sqluldr2导出数据和sqlldr导入数据的方法
转载:利用sqluldr2 导出数据和sqlldr 导入数据的方法Oracle 数据导出工具sqluldr2 可以将数据以csv、txt 等文件格式导出,适用于大批量数据的导出,导出速度非常快,导出后可以使用Oracle SQL Loader 工具将数据导入到数据库中。
下面将介绍Sqluldr2 和sqlldr 在Windows 平台下的数据处理过程。
当集成sqluldr2 在脚本中时,就希望屏蔽上不输出这些信息,但又希望这些信息能保留,这时可以用“LOG”选项来指定日志文件名。
sqluldr2test/test@127.0.1.1/orcl sql=test_sql.sql head=yes file=d:\tmp001.csv log=+d:\tmp001.log 当使用table 参数时,在目录下会生成对应的ctl 控制文件,如下语句会生成temp_001_sqlldr.ctl 文件。
sqluldr2test/test@127.0.1.1/orcl query=“select * from temp_001” table=temp_001 head=yes file=d:\tmp001.csv 在指定分隔符时,可以用字符的ASCII 代码(0xXX,大写的XX 为16 进制的ASCII 码值)来指定一个字符,常用的字符的ASCII 代码如下:在选择分隔符时,一定不能选择会在字段值中出现的字符组合,如常见的单词等,很多次导入时报错,回过头来找原因时,都发现是因为分隔符出现在字段值中了。
characterset :字符集,一般使用字符集AL32UTF8,如果出现中文字符集乱码时,改成ZHS16GBK。
fields terminatedby ‘string’:文本列分隔符。
当为tab 键时,改成’\t’,或者X’09’;空格分隔符whitespace,换行分隔符‘\n’或者X’0A’;回车分隔符‘\r’或者X’0D’;默认为’\t’。
XORACLE数据导入之SQLLOAD外部数据导入
XORACLE数据导⼊之SQLLOAD外部数据导⼊今天公司需要把外部⽂本的⼀些数据导⼊到数据库。
这⾥把相关步骤和注意的地⽅记录,供需要的⼈参考学习!这⾥的环境是在windows下的数据库,linux或者其他数据库同理!1、准备⼯作:创建需要导⼊数据的表结构,如果已有相关的表,此步省略!SQL>create table test2 (3 host VARCHAR2(30),4user_name VARCHAR2(30),5 ip_address VARCHAR2(15),6 pass VARCHAR2(4) default'no'not null,7 judge NUMBER default0not null,8 endtime DATE9 );表已创建。
2、编写sqlload导⼊数据的控制⽂件,这⾥测试的控制⽂件如下,可以根据⾃⼰需要添加相关的控制参数,测试的话复制保存为txt⽂件即可!LOAD DATAINFILE 'd:\data.txt'INTO TABLE testTRUNCATEfields terminated by','trailing nullcols(HOST,USER_NAME,IP_AddrESS,PASS,JUDge,endTIME)控制⽂件还有其他参数,根据⾃⼰需求调整和测试:附部分控制参数:具体⽤法以官⽅⽂档为准OPTIONS (skip=1,rows=128) -- sqlldr 命令显⽰的选项可以写到这⾥边来,skip=1 ⽤来跳过数据中的第⼀⾏LOAD DATAINFILE "users_data.csv" --指定外部数据⽂件,可以是不同格式的数据⽂件,如csv、txt都⽀持可以写多个 INFILE "another_data_file.csv" 指定多个数据⽂件truncate--操作类型,⽤ truncate table 来清除表中原有记录,根据情况⽽定是否需要清楚原有表中数据INTO TABLE users --要插⼊记录的表Fields terminated by "," --数据中每⾏记录⽤ "," 分隔Optionally enclosed by'"'--数据中每个字段⽤ '"' 框起,⽐如字段中有 "," 分隔符时trailing nullcols --表的字段没有对应的值时允许为空(virtual_column FILLER, --这是⼀个虚拟字段,⽤来跳过由 PL/SQL Developer ⽣成的第⼀列序号user_id number, --字段可以指定类型,否则认为是 CHARACTER 类型, log ⽂件中有显⽰user_name,login_times,last_login DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受⽇期的格式,相当⽤ to_date() 函数转换)insert--为缺省⽅式,在数据装载开始时要求表为空append --在表中追加新记录replace--删除旧记录(⽤ delete from table 语句),替换成新装载的记录truncate--删除旧记录(⽤ truncate table 语句),替换成新装载的记录3、创建需要导⼊的数据,注意数据格式必须和表结构严格对应,否则导⼊失败!测试数据如下:有部分数据最后字段为空,所以控制⽂件中需要加trailing nullcols 参数!ttt,SCOTT,192.168.1.111,yes,1,qq,JACK,192.168.1.20,no,1,YY,TOM,192.168.1.20,no,1,WEB1,HAHA,192.168.1.1,no,1,XXX,ROBIN,111.111.111.111,no,1,08-AUG-08DB2,LUCY,192.168.10.10,no,1,ORACLE,LILY,222.222.222.222,no,1,WORKGROUP,DENNIS,133.133.133.133,no,0,08-AUG-08DCR,CANDY,192.168.100.10,no,1,T3,FLY,192.168.10.33,no,1,T1,LINDA,192.168.10.200,no,1,08-AUG-08T2,LILEI,192.168.100.31,no,1,08-AUG-084、导⼊数据-导⼊时也有相关的参数进⾏控制附部分导⼊参数:各参数可以再命令⾏下输⼊sqlldr查看C:\Documents and Settings\Administrator>sqlldrSQL*Loader: Release 11.2.0.1.0- Production on星期三 2⽉2717:13:242013Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.⽤法: SQLLDR keyword=value [,keyword=value,...]有效的关键字:userid -- ORACLE ⽤户名/⼝令control -- 控制⽂件名log-- ⽇志⽂件名bad -- 错误⽂件名data -- 数据⽂件名discard -- 废弃⽂件名discardmax -- 允许废弃的⽂件的数⽬ (全部默认)skip -- 要跳过的逻辑记录的数⽬ (默认 0)load-- 要加载的逻辑记录的数⽬ (全部默认)errors -- 允许的错误的数⽬ (默认 50)rows -- 常规路径绑定数组中或直接路径保存数据间的⾏数(默认: 常规路径64, 所有直接路径)bindsize -- 常规路径绑定数组的⼤⼩ (以字节计) (默认 256000)silent -- 运⾏过程中隐藏消息 (标题,反馈,错误,废弃,分区)direct -- 使⽤直接路径 (默认 FALSE)parfile -- 参数⽂件: 包含参数说明的⽂件的名称parallel -- 执⾏并⾏加载 (默认 FALSE)file-- 要从以下对象中分配区的⽂件skip_unusable_indexes -- 不允许/允许使⽤⽆⽤的索引或索引分区 (默认 FALSE)skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为⽆⽤ (默认 FALSE)commit_discontinued -- 提交加载中断时已加载的⾏ (默认 FALSE)readsize -- 读取缓冲区的⼤⼩ (默认 1048576)external_table -- 使⽤外部表进⾏加载; NOT_USED, GENERATE_ONLY, EXECUTE (默认 NOT_USED)columnarrayrows -- 直接路径列数组的⾏数 (默认 5000)streamsize -- 直接路径流缓冲区的⼤⼩ (以字节计) (默认 256000)multithreading -- 在直接路径中使⽤多线程resumable -- 启⽤或禁⽤当前的可恢复会话 (默认 FALSE)resumable_name -- 有助于标识可恢复语句的⽂本字符串resumable_timeout -- RESUMABLE 的等待时间 (以秒计) (默认 7200)date_cache -- ⽇期转换⾼速缓存的⼤⼩ (以条⽬计) (默认 1000)no_index_errors -- 出现任何索引错误时中⽌加载 (默认 FALSE)如下命令:control=指定控制⽂件和路径log=导⼊⽇志⽂件保存 bad=错误信息 data=数据⽂件开始导⼊:C:\Documents and Settings\Administrator>sqlldr scott/tiger control=d:\sqlload.txt log=d:\loadlog.txt bad=d:\bad.txt data=d:\data.txtSQL*Loader: Release 11.2.0.1.0- Production on星期三 2⽉2717:06:522013Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.达到提交点-逻辑记录计数12导⼊成功后查看结果:C:\Documents and Settings\Administrator>sqlplus scott/tigerSQL*Plus: Release 11.2.0.1.0 Production on星期三 2⽉2717:07:052013Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0- ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>select*from test;HOST USER_NAME IP_ADDRESS PASS JUDGE ENDTIME---------- ---------- ------------------------------ -------- ---------- --------------ttt SCOTT 192.168.1.111 yes 1qq JACK 192.168.1.20 no 1YY TOM 192.168.1.20 no 1WEB1 HAHA 192.168.1.1 no 1DB2 LUCY 192.168.10.10 no 1ORACLE LILY 222.222.222.222 no 1DCR CANDY 192.168.100.10 no 1T3 FLY 192.168.10.33 no 1已选择8⾏。
oracle19c之导入、导出及脚本
oracle19c之导⼊、导出及脚本 记录⼀下oracle两种常⽤的导⼊导出⽅式:exp、imp;spool、SQL*Loader及其脚本。
⼀、exp与imp导⼊导出 1、exp导出操作exp c##sl/123456 buffer=64000 file=./full.sql full=y --导出整个数据库exp c##sl/123456 buffer=64000 file=./sl.sql owner=c##sl --导出⽤户c##sl下的对象exp c##sl/123456 buffer=64000 file=./book.sql tables=book --导出book表exp c##sl/123456 buffer=64000 file=./book.sql tables=book,book2; --导出book、book2表 2、imp导⼊操作exp c##sl/123456 buffer=64000 file=./book.sql tables=bookdrop table book;imp c##sl/123456 buffer=64000 file=./book.sql tables=book --需要先删除表,再导⼊,否则报错exp c##sl/123456 buffer=64000 file=./book.sql tables=bookimp c##sl/123456 buffer=64000 ignore=y file=./book.sql tables=book --只会导⼊主键不冲突的数据,冲突的忽略exp c##sl/123456 buffer=64000 file=./sl.sql owner=c##slimp c##sl/123456 buffer=64000 ignore=y file=./sl.sql full=y --导⼊sl.sql中的全部⽂件imp c##sl/123456 buffer=64000 ignore=y file=./sl.sql tables=book,book2 --导⼊sl.sql中的表book、与book2 说明:tables指定导⼊或导出的表;full=y表⽰导⼊或导出全部;ignore=y表⽰跳过主键冲突执⾏ ⼆、spool、SQL*Loader导⼊导出 准备表与数据CREATE TABLE book(id varchar2(10) NOT NULL,name varchar2(50) DEFAULT NULL,author varchar2(20) DEFAULT NULL,price decimal(10,0) DEFAULT NULL,update_time date DEFAULT NULL,create_time date DEFAULT NULL,is_deleted varchar2(1) DEFAULT NULL,PRIMARY KEY (id));insert into book values ('1','c##','sl',23.4,to_date('2011-11-11 11:11:11','YYYY-MM-DD HH24:MI:SS'),to_date('2011-11-11 11:11:14','YYYY-MM-DD HH24:MI:SS'),1);insert into book values ('2','c##','sl',23.4,to_date('2011-11-11 11:11:11','YYYY-MM-DD HH24:MI:SS'),to_date('2011-11-11 11:11:14','YYYY-MM-DD HH24:MI:SS'),1);insert into book values ('3','c##','sl',23.4,to_date('2011-11-11 11:11:11','YYYY-MM-DD HH24:MI:SS'),to_date('2011-11-11 11:11:14','YYYY-MM-DD HH24:MI:SS'),1); 1、spool导出操作 创建sql⽂件book_spoolout.sqlset echo offset heading offset feedback offset pagesize 0set linesize 1000spool book.datselect id||','||name||','||author||','||price||','||to_char(update_time,'YYYY-MM-DD hh24:mi:ss')||','||to_char(create_time,'YYYY-MM-DD hh24:mi:ss')||','||is_deleted from book;spool off 登录sqlplus,执⾏@导出⽂件[root@localhost tmp]# sqlplus c##sl/123456SQL> @book_spoolout.sql; 导出数据⽂件book.dat如下:1,c##,sl,23,2011-11-11 11:11:11,2011-11-11 11:11:14,12,c##,sl,23,2011-11-11 11:11:11,2011-11-11 11:11:14,13,c##,sl,23,2011-11-11 11:11:11,2011-11-11 11:11:14,1 说明: b、这⾥登录数据库⽬录与sql⽂件、导出⽂件⽬录⼀致; c、如果导出⽬录没有写权限,会报错“⽆法创建 SPOOL ⽂件 "book.dat"当前未假脱机”,注意赋权; d、要把控制⽂件写⼊⽂件中保存,如果直接复制到sqlplus中执⾏,导出的⽂件中⾸尾⾏含有其他命令或sql语句; 2、SQL*Loader导⼊操作 创建控制⽂件book.ctlload datainfile book.datinto table booktruncatefields terminated by ","(ID,NAME,AUTHOR,PRICE,UPDATE_TIME DATE "YYYY-MM-DD HH24:MI:SS",CREATE_TIME DATE "YYYY-MM-DD HH24:MI:SS",IS_DELETED) 执⾏导⼊命令,将上⾯的book.dat导⼊数据库sqlldr userid=c##sl/123456 control=book.ctl data=book.dat 注意: a、这⾥的控制⽂件与数据⽂件在同⼀⽬录下 b、truncate是删除原表数据,还有insert、append、replace等 c、fields terminated by是字段分隔符 三、脚本 可以看到spool、sql loader的导⼊导出还是挺复杂的,下⾯整理出通⽤性更强的脚本 1、导出 准备表与数据CREATE TABLE music(id varchar2(10) NOT NULL,name varchar2(50) DEFAULT NULL,author varchar2(20) DEFAULT NULL,price decimal(10,2) DEFAULT NULL,update_time varchar2(19) DEFAULT NULL,create_time varchar2(19) DEFAULT NULL,is_deleted varchar2(1) DEFAULT NULL,PRIMARY KEY (id));insert into music values ('1','你好你好','sl',23.4,'2011-11-11 11:11:11','2011-11-11 11:11:14','1');insert into music values ('2','你好你好','sl',23.4,'2011-11-11 11:11:11','2011-11-11 11:11:14','1');insert into music values ('3','你好你好','sl',23.4,'2011-11-11 11:11:11','2011-11-11 11:11:14','1'); 创建脚本oddpe#!/bin/shif [ $# -lt 5 ];thenecho "param error: please reference example:"echo "oddp music ./music.dat c##sl/123456 -f'|!?|' -r'@#$'"exit 1fiTABLE=${1}DATAFILE=${2}USERPASS=${3}shiftshiftshiftwhile getopts "f:r:" argdof) FIELD=${OPTARG};;r) ROW=${OPTARG};;?) ROW=1;;esacdoneDATAPATH=`dirname ${DATAFILE}`DATANAME=`basename ${DATAFILE}`SPOOLOUTSQL=${DATAPATH}/${TABLE}_spoolout.sqlTODAY=`date '+%Y%m%d'`LOGFILE=${DATAPATH}/${TABLE}_unload_${TODAY}.logsqlplus -S ${USERPASS} <<eof >>${LOGFILE}set serveroutput on verify off trimspool on timing off feedback offset numwidth 50 pagesize 0 linesize 1000spool ${SPOOLOUTSQL}declarev_colcount number :=0;begindbms_output.put_line('select');for col in (select column_namefrom user_tab_columnswhere table_name = upper('${TABLE}')order by column_id)loopif v_colcount = 0thendbms_output.put(chr(9) || col.column_name);elsedbms_output.put_line(chr(9) || '||' || '''${FIELD}''' || '||' );dbms_output.put(chr(9) || col.column_name);end if;v_colcount :=v_colcount + 1;end loop;dbms_output.put('||' || '''${ROW}''');dbms_output.new_line;dbms_output.put_line('from ' || '${TABLE};');end;/spool offexiteofecho "`date +%T`: 开始导出数据!" 2>&1|tee -a ${LOGFILE}sqlplus -S ${USERPASS} <<eofset echo off heading on feedback off pagesize 0 linesize 1000set termout off trimspool on numwidth 24 arraysize 1000 verify off newpage 0 space 0spool ${DATAFILE}.tmp@${SPOOLOUTSQL}spool offexiteofif [ $? -ne 0 ];thenecho "`date +%T`: 导出${TABLE}失败!" 2>&1|tee -a ${LOGFILE}exit -1else#去除中间空⾏grep . ${DATAFILE}.tmp>${DATAFILE}rm -f ${DATAFILE}.tmpecho "`date +%T`: 导出${TABLE}完毕!" 2>&1|tee -a ${LOGFILE}exit 0fi 执⾏⽰例,导出music表的数据到music.dat⽂件,以|!?|分隔字段,以@#$结束⼀⾏./oddpe music /usr/local/myroom/script/tmp/music.dat c##sl/123456 -f'|!?|' -r'@#$' 2、导⼊ 创建脚本oddpi#!/bin/shif [ $# -lt 5 ];thenecho "param error: please reference example:"echo "oddpi music ./music.dat c##sl/123456 -f'|!?|' -r'@#$'"exit 1fiTABLE=${1}USERPASS=${3}shiftshiftshiftwhile getopts "f:r:" argdocase ${arg} inf) FIELD=${OPTARG};;r) ROW=${OPTARG};;?) ROW=1;;esacdoneDATAPATH=`dirname ${DATAFILE}`DATANAME=`basename ${DATAFILE}`CTLFILE=${DATAPATH}/${TABLE}.ctlTODAY=`date '+%Y%m%d'`LOGFILE=${DATAPATH}/${TABLE}_load_${TODAY}.logecho "`date +%T`: 创建控制⽂件" 2>&1|tee -a ${LOGFILE}sqlplus -S ${USERPASS} <<eof >>${LOGFILE}set serveroutput on verify off trimspool on timing off feedback offset numwidth 50spool ${CTLFILE}declarev_colcount number :=0;begindbms_output.put_line('load data');dbms_output.put_line('infile ${DATANAME} '|| '"str ''${ROW}\n''" ');dbms_output.put_line('into table '||'${TABLE}');dbms_output.put_line('truncate');dbms_output.put_line('fields terminated by '|| '''${FIELD}''');dbms_output.put_line('trailing nullcols');dbms_output.put_line('(');for col in (select column_name,casewhen data_type = 'NUMBER' then column_name || ' "nvl(rtrim(:' || column_name || '),' || '0.00' || ')"' else column_name || ' "nvl(rtrim(:' || column_name || '),' || ''' ''' || ')"'end xfrom user_tab_columnswhere table_name = upper('${TABLE}')order by column_id)loopif v_colcount = 0thendbms_output.put(chr(9) || col.x);elsedbms_output.put_line(',');dbms_output.put(chr(9) || col.x);end if;v_colcount :=v_colcount + 1;end loop;dbms_output.new_line;dbms_output.put_line(')');end;/spool offset feedback oneofecho "`date +%T`: 开始导⼊数据!" 2>&1|tee -a ${LOGFILE}sqlldr userid=${USERPASS} control=${CTLFILE} log=${LOGFILE} data=${DATAFILE} direct=trueif [ $? -ne 0 ];thenecho "`date +%T`: 导⼊${TABLE}失败!" 2>&1|tee -a ${LOGFILE}exit -1elseecho "`date +%T`: 导⼊${TABLE}完毕!" 2>&1|tee -a ${LOGFILE}exit 0fi 执⾏脚本,导⼊数据./oddpi music /usr/local/myroom/script/tmp/music.dat c##sl/123456 -f'|!?|' -r'@#$' 说明:对导⼊脚本中dbms_output.put_line('infile ${DATANAME} '|| '"str ''${ROW}\n''" ');的解析 load data的str属性表⽰数据的换⾏符,⽐如3^^你好你好^^sl^^23.4^^2011-11-11 11:11:11^^2011-11-11 11:11:14^^1!!2^^你好你好^^sl^^23.4^^2011-11-11 11:11:11^^2011-11-11 11:11:14^^1!!1^^你好你好^^sl^^23.4^^2011-11-11 11:11:11^^2011-11-11 11:11:14^^1!! a、"\n"是⾃带的换⾏符,因为数据⼿动换⾏了,所以str后⾯除了指定的换⾏符"!!"还有"\n" b、有些⽂件中⼿动的换⾏符不是"\n"⽽是"\r\n",这时对应语句改为......"str '!!\r\n'"...... c、str后⾯还可以跟X+转成raw类型的字符,下⾯的语句执⾏效果相同。
oracle导出表结构和数据,使用plsql
oracle导出表结构和数据,使⽤plsql
⽐如说需要把A数据库⾥⾯的数据,导⼊到B数据库
准备⼯作:在B数据库中创建B数据库同名的的⽤户名和表空间,注意⼤⼩写必须⼀样。
1,导出表结构。
A数据库⾥点击⼯具栏⾥的tools--Export User Objects,如截图:
2,选中需要导出的表(不选就是全部)。
3,选择导出路径和⽂件名称。
点击EXPORT。
对话框下⽅显⽰绿⾊进度条为成功。
4,打开需要导⼊表结构的数据库B,打开⼀个command对话框,输⼊@,选择All Files(*.*,)找到刚才导出的sql⽂件,然后回车。
结果如截图表⽰成功:
5,导出数据。
A数据库⾥点击⼯具栏⾥的tools--Export Tables。
如截图:
6,选中需要导出的表(不选就是全部)。
7,选择导出路径和⽂件名称。
点击EXPORT。
对话框下⽅显⽰Export...done表⽰成功。
8,打开需要导⼊表结构的数据库B,点击⼯具栏⾥的tools--Import Tables。
如截图:
9,导⼊⽂件路径选择刚才导出的⽂件,点击。
如截图:
10,点击import,对话框下⽅显⽰Importing tables ... done表⽰成功。
数据库常用的导入导出命令
我给你一些数据库常用的导入导出命令吧:该命令在“开始菜单>>运行>>CMD”中执行一、数据导出(exp.exe)1、将数据库orcl完全导出,用户名system,密码accp,导出到d:\daochu.dmp 文件中exp system/accp@orcl file=d:\daochu.dmp log= d:\daochu.log full=y2、将数据库orcl中scott用户的对象导出exp scott/accp@orcl file=d:\daochu.dmp owner=(scott)3、将数据库orcl中的scott用户的表emp、dept导出exp scott/accp@orcl file= d:\daochu.dmp tables=(emp,dept)4、将数据库orcl中的表空间testSpace导出exp system/accp@orcl file=d:\daochu.dmp tablespaces=(testSpace)二、数据导入(imp.exe)1、将d:\daochu.dmp 中的数据导入orcl数据库中。
imp system/accp@orcl file=d:\daochu.dmp full=yimp system/accp@orcl file=d:\daochu.dmp full=y ignore=y上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上ignore=y 就可以了。
2、如果导入时,数据表已经存在,将报错,对该表不会进行导入;加上ignore=y 即可,表示忽略现有表,在现有表上追加记录。
imp scott/accp@orcl file=d:\daochu.dmp full=y ignore=y3、将d:\daochu.dmp中的表emp导入imp scott/accp@orcl file=d:\daochu.dmp tables=(emp)注意:在服务器端执行,imp 命令、exp命令是在dos提示符在cmd命令行下直接执行的。
OraclePLSQL数据导出csv的案例
OraclePLSQL数据导出csv的案例 之前项⽬运维⼈员碰到⼀个问题,需要写⼀个存储过程,把数据导出为csv⽂件,查了⼀些资料,帮他写成了⼀个PLSQL,今天拿出来分享⼀下,不⾜之处,欢迎指教。
数据背景:⽤到两张表,⼀张存放单位组织名称org_name,它只有⼀个字段org_name;⼀张存放要导出的具体数据ryxx,其中ryxx这张表有⼀个字段是org_name中的org_name字段(需要like '%org_name%')。
(表因为⼀些原因不能贴出来,见谅)⽬标需求:要求根据单位组织名称即org_name,分批导出ryxx数据为csv⽂件,并且导出的⽂件最⼤不能超过30000⾏,⽂件名为单位组织名称后跟序号所⽤知识: PLSQL语法,包括游标、循环、条件等语句,CSV⽂件导出语法具体实现: --1、创建要导出⽂件的存放地址的变量 CREATE OR REPLACE DIRECTORY mydir AS 'D:\sjdc'; --2、PLSQL开始 DECLARE -- 定义游标 org ⽤于获取组织名称 CURSOR org IS SELECT org_name FROM org_name; -- 定义组织名 org_name,接收组织名 org_name VARCHAR2(40); -- 定义组织名相似匹配(⽤于 LIKE 查询) org_name_like VARCHAR(40); -- 定义总量,接收每次根据组织名称查询时 ryxx 表中匹配的数据总量 count_number NUMBER; -- 定义每个组织名称关联的数据需要循环次数(因为每次导出只能导出30000条数据,需要多次导出) loop_times NUMBER; -- 定义当前循环到第⼏次(同上) loop_i NUMBER; -- 定义根据 org_name 匹配查询出的具体数据,为SYS_REFCURSOR类型,即动态游标 data_cur SYS_REFCURSOR; -- 定义匹配查询出的具体数据的总量(同上) count_cur SYS_REFCURSOR; -- 定义⽂件输出 csv_output UTL_FILE.FILE_TYPE; -- 定义 ryxx 的⾏类型 data_row ryxx%ROWTYPE; -- 每个⽂件导出的最⼤⾏数 MAX_LINE NUMBER := 30000; -- 输出位置 dir VARCHAR(20) := 'MYDIR'; -- 函数体开始 BEGIN -- 1、打开 org 游标,获取组织名称,挨个取出名称进⾏操作 OPEN org; LOOP -- 2、循环取出组织名称,当⽆数据时推出循环 FETCH org INTO org_name; EXIT WHEN org%NOTFOUND; -- 3、拼接相似查询的 org_name_like,两边都有% org_name_like := '%' || org_name || '%'; -- 4、打开游标 count_cur,查询对应的单位名称下的 ryxx 总量 OPEN count_cur FOR 'SELECT COUNT(*) FROM ryxx WHERE st_code_name like :org_name_like' USINGorg_name_like; FETCH count_cur INTO count_number; CLOSE count_cur; -- 5、计算此单位的数据总共需要导出⼏次 loop_times := count_number/MAX_LINE; -- 6、开始循环导出数据 loop_i := 0; LOOP -- 退出循环条件:当前循环次数⼤于总共要循环的次数 EXIT WHEN loop_i > loop_times; IF loop_i <= loop_times THEN -- 7、打开查询数据的data_cur游标,导出数据(需要分页查询,所以外层不能直接⽤*,否则不能把数据放⼊data_row) OPEN data_cur FOR 'SELECT id, name, age FROM (SELECT t.*, rownum rn FROM ryxx WHERE ST_CODE_NAME LIKE :org_name_like) WHERE rn <= ' || TO_CHAR((loop_i) * MAX_LINE) || ' AND rn > ' || TO_CHAR(loop_i * MAX_LINE) USING org_name_like; csv_output := UTL_FILE.FOPEN('MYDIR', org_name || loop_i || '.csv', 'W', MAX_LINE); LOOP FETCH data_cur INTO data_row; EXIT WHEN data_cur%NOTFOUND; UTL_FILE.PUT_LINE(CSV_OUTPUT, data_row.id || ',' || data_ || ',' || data_row.age); END LOOP; loop_i := loop_i + i; UTL_FILE.FCLOSE(csv_output); CLOSE data_cur; END IF; END LOOP; END LOOP; CLOSE org; END; /。
ORACLE_SQL导出CSV
}conf_info;
#define ERR_NODEF_DBCONN -1
#define ERRMSG_NODEF_DBCONN "未知的数据库连接模式\n"
#define ERR_FILEPATH_BUF -2
extern void printpid(void *f_data);
extern void printcolname(int f_fdes,OCIOraFieldSet *f_fieldset);
extern void printdata(int f_fdes,OCIOraFieldSet *f_fieldset);
#define ERR_OS_VERSION -10
#define ERRMSG_OS_VERSION "操作系统版本不确定,请重新编译程序\n"
#define ERR_CREATE_LOGDIR -11
#define ERRMSG_CREATE_LOGDIR "创建日志文件夹失败\n"
#define ERR_LOGDIR_WRPERMISSION -12
#define ERRMSG_LOGDIR_WRPERMISSION "日志文件夹没有写权限\n"
#define ERR_CREATEOPEN_LOGFILE -13
#define ERRMSG_CREATEOPEN_LOGFILE "创建或打开日志文件失败\n"
#include "myinclude.h"
#include "myoci.h"
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据库表导出和导入csv文件操作
数据库是Oracle 9i
1、导出csv文件
这个十分简单,用pl/sql工具即可,首先选中要导出的表,右键选择Query data,在左侧出现的窗口中,选择Export Query Restls 选择要导出的文件类型即可,一般都导csv格式。
2、导入csv文件
比喻数据库里有表t_province 字段1:province 字段2:city
CSV文件存放路径:f:\test.csv 列需与数据库保持一致
还需要编写一个test.ctl文件,内容如下:
load data
infile 'f:\城市.csv'
into table "T_PROVINCE"
fields terminated by ','
(province,city)
然后在cmd下,输入:sqlldr userid=clevergirl/clevergirl@ORCL_192.168.128.129 control=f:test.ctl 然后回车即可
3、几个值得注意的地方
一开始我是这样写的:sqlldr control=f:\test.ctl log=f:test.log
报了:SQL*Loader-704: 内部错误: ulconnect: OCIServerAttach [0]
ORA-12560: TNS: 协议适配器错误
上网查了下,说是和环境变量有关,可以修改,但我觉得还是自己指定算了
然后我怕权限不够,所以直接用sys用户登录:sqlldr userid=sys/sys@ORCL_192.168.128.129 control=f:test.ctl
报了:SQL*Loader-128: 无法开始会话
ORA-28009: connection to sys should be as sysdba or sysoper 上面这个换成正确的后,又报了一个
SQL*Loader-941: 在描述表"t_province" 时出错
ORA-04043: 对象"t_province" 不存在
这个错误的问题出在ctl文件,里面的表名要大写才OK。