【IT168 服务器学院】在使用oracle时,总觉得oracle的导入,导出没有informix的load,unload好用,没办法,只能参照网上朋友的思路和informix的实现,写了几个脚本,希望各位高手指点:

=============================================

工具用法:

unload.sh

Usage: unload.sh userid/passwd[@oraclesid] [tabname]

注释:

如果不加’@oraclesid’,则用当前环境变量ORACLE_SID。

如果不加tabname参数,则处理该用户下的所有表,生成’表名.unl’文件。

如果加tabname参数,则单独处理该表,生成’表名.unl’文件。

load.sh

Usage: load.sh userid/passwd[@oraclesid] [tabname]

注释:

如果不加’@oraclesid’,则用当前环境变量ORACLE_SID。

如果不加tabname参数,则装载该用户下的所有表,必须存在’表名.unl’

文件。

如果加tabname参数,则单独处理该表,必须存在’表名.unl’文件。

=============================================

具体实现:

unload.sh

利用spool的功能,将表中的数据导出到对应的文本中。

load.sh

利用sql*load的功能,将文本中的数据导入到表中。

控制文件是自动生成的,使用者不需要知道格式

执行sqlload的脚本也是自动生成

generate_control_file.sh

生成控制文件

generate_execute_shell.sh

生成执行脚本

=============================================

代码说明

load.sh

#!/usr/bin/ksh

#########################################

#

# 模块: load.sh

#

# 描述: 根据一个数据库或表名来装载对应的数据文件

#

# 参数 1 = 用户名/密码[@实例名]

# 参数 2 = 表名(可选)

#

# 作者 Bing He

#

# 修改记录

# 日期 修改人 修改描述

#

# 09/23/2003 Bing He 开始编写

#

###########################################

lv_temp1="wk.test1"

f_get_tables()

{

rm -f ${lv_temp1}

sqlplus ${userid}

set colsep $sep;

set echo off;

set feedback off;

set heading off;

set pagesize 0;

set linesize 1000;

set numwidth 12;

set termout off;

set trimout on;

set trimspool on;

spool ${lv_temp1};

select table_name from user_tables;

spool off;

exit

!

if [ "$?" -ne 0 ]

then

echo "Error:sqlplus ${userid} error in load for ${userid} !"

echo "please check userid and passwd or oracle_sid."

exit

fi

if [ -f ${lv_temp1} ]

then

lv_tables=`cat ${lv_temp1} |grep -v "^SQL>" | tr -d '' ''`

else

echo "Error:${lv_temp1} file not found!"

exit

fi

rm -f ${lv_temp1}

}

######################################

## 主程序入口

lv_no=$#

case ${lv_no} in

1 )

userid=$1

f_get_tables;

;;

2 )

userid=$1

lv_tables=$2

;;

* )

echo "Usage: $0 "

exit

;;

esac

for lv_table in ${lv_tables}

do

if [ ! -f ${lv_table}.unl ]

then

echo "Error:${lv_table}.unl file not found!"

else

generate_control_file.sh ${userid} ${lv_table}

generate_execute_shell.sh ${userid} ${lv_table}

sh load_${lv_table}.sh

rm -f ${lv_table}.ctl

rm -f load_${lv_table}.sh

fi

done

##########################################

unload.sh

#!/usr/bin/ksh

#############################################

#

# 模块: unload.sh

#

# 描述: 根据一个数据库或表名来卸载数据并生成对应的数据文件

#

# 参数 1 = 用户名/密码[@实例名]

# 参数 2 = 表名(可选)

#

# 作者 Bing He

#

# 修改记录

# 日期 修改人 修改描述

#

# 09/23/2003 Bing He 开始编写

#

##########################################

lv_sep=''|'' # --分隔符,可以修改成自己想要的分隔符,如''|''

lv_temp1="unload.temp1"

f_get_tables()

{

rm -f ${lv_temp1}

sqlplus ${userid}

set colsep ${lv_sep};

set echo off;

set feedback off;

set heading off;

set pagesize 0;

set linesize 1000;

set numwidth 12;

set termout off;

set trimout on;

set trimspool on;

spool ${lv_temp1};

select table_name from user_tables;

spool off;

exit

!

if [ "$?" -ne 0 ] ; then

echo "sqlplus $userid error in get table name !!"

echo "please check userid and passwd or database."

exit

fi

if [ -f ${lv_temp1} ]

then

lv_tables=`cat ${lv_temp1} |grep -v "^SQL>" | tr -d '' ''`

else

echo "Error:${lv_temp1} file not found!"

exit

fi

rm -f ${lv_temp1}

}

########################################

## 主程序入口

lv_no=$#

case ${lv_no} in

1 )

userid=$1

f_get_tables;

;;

2 )

userid=$1

lv_tables=$2

;;

* )

echo "Usage: $0 "

exit

;;

esac

##############################

###############################

## 执行下载操作

for table in ${lv_tables}

do

rm -f lv_$table.txt

sqlplus ${userid}

set colsep ${lv_sep};

set echo off;

set feedback off;

set heading off;

set pagesize 0;

set linesize 1000;

set numwidth 12;

set termout off;

set trimout on;

set trimspool on;

spool lv_$table.txt;

select * from $table;

spool off;

!

if [ "$?" -ne 0 ]

then

echo "error:sqlplus $userid error in unload table $table!!"

echo "please check userid and passwd or database."

exit

fi

if [ -f lv_$table.txt ]

then

cat lv_$table.txt | grep -v "^SQL>"|sed -e "s/ *$//g"|sed "s/$/\|/g"|sed -e "s/ *\|/\|/g" >${table}.unl

if [[ `grep "ORA-" $table.unl` = "" ]]; then

echo "unload table ${table}....\t\t\t\t\t ok"

else

cat ${table}.unl

err="$err ${table}"

fi

else

echo $0 error

fi

rm -f lv_$table.txt

done

#########################################束操作

if [[ "X$err" = "X" ]];then

echo "Unload Complete!,Thank you!"

else

echo "Unload Table $err error, please check it!"

fi

############################################

generate_control_file.sh

#!/usr/bin/ksh

############################################

#

# 模块: generate_control_file.sh

#

# 描述: 根据一个表名生成该表的控制文件

#

# 参数 1 = 用户名/密码[@实例名]

# 参数 2 = 表名

#

# 作者 Bing He

#

# 修改记录

# 日期 修改人 修改描述

#

# 09/23/2003 Bing He 开始编写

#

##############################################

##############################################

## 主程序入口

if [ ! $# -eq 2 ]

then

echo "Usage: $0 "

exit

else

userid=$1

table=$2

fi

###########################################

###########################################

## 执行下载操作

lv_temp="wk_${table}.test"

lv_temp1="wk_${table}.test1"

lv_temp2="wk_${table}.test2"

lv_control="${table}.ctl"

sqlplus ${userid}

spool ${lv_temp};

desc ${table}

spool off;

exit

!

if [ "$?" -ne 0 ]

then

echo "Error:sqlplus ${userid} error in generate control file for table ${table} !"

echo "please check userid and passwd or oracle_sid."

exit

fi

if [ -f ${lv_temp} ]

then

cat ${lv_temp}|grep -v "^SQL>" |grep -v " Name " |grep -v " -------" |awk ''{print $1}'' > ${lv_temp1}

lv_line_num=`cat ${lv_temp1} | wc -l`

lv_line_num=`expr ${lv_line_num} - 2`

lv_index=0

rm -f ${lv_temp2}

for lineinfo in `cat ${lv_temp1}`

do

if [ ${lv_index} -eq ${lv_line_num} ]

then

echo "${lineinfo}" >> ${lv_temp2}

else

echo "${lineinfo}," >> ${lv_temp2}

lv_index=`expr ${lv_index} + 1`

fi

done

else

echo "$0 error :not find ${lv_temp} file."

exit

fi

lv_str="LOAD DATA INFILE ''${table}.unl'' BADFILE ''bad_${table}.bad'' APPEND INTO TABLE ${table} FIELDS TERMINATEd BY \"|\""

echo ${lv_str} > ${lv_control}

echo "(" >> ${lv_control}

cat ${lv_temp2} >> ${lv_control}

echo ")" >> ${lv_control}

rm -f ${lv_temp}

rm -f ${lv_temp1}

rm -f ${lv_temp2}

#########################################

generate_execute_shell.sh

#!/usr/bin/ksh

#########################################

#

# 模块: generate_execute_shell.sh

#

# 描述: 根据一个表名生成该表的装载脚本

#

# 参数 1 = 用户名/密码[@实例名]

# 参数 2 = 表名

#

# 作者 Bing He

#

# 修改记录

# 日期 修改人 修改描述

#

# 09/23/2003 Bing He 开始编写

#

########################################

#######################################

## 主程序入口

if [ ! $# -eq 2 ]

then

echo "Usage: $0 "

exit

else

userid=$1

table=$2

fi

########################################

########################################

## 局部变量定义区域

lv_rows=10000

lv_bindsize=8192000

lv_readsize=8192000

#########################################

#########################################

## 生成执行脚本文件

echo "sqlldr ${userid} control=${table}.ctl rows=${lv_rows} bindsize=${lv_bindsize} readsize=${lv_readsize} log=log_${table}.log bad=bad_${table}.bad direct=true" > load_${table}.sh

oracle表数据导出成unl文件,oracle的文本导入、导出技巧相关推荐

  1. 【GitHubDailyShare】消息导出工具,可将聊天记录导出成 HTML 文件、支持文本、语音、图片、视频、消息

    推荐一款开源的微信消息导出工具:WeChat Export,可将聊天记录导出成 HTML 文件.支持文本.语音.图片.视频.消息等资源. GitHub:github.com/luin/wechat-e ...

  2. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...

  3. mysql,oracle表数据相互导入

    mysql导入oracle: 例如mysql中有ts_user_info表,现在要导入到oracle中的user_info表 1:导出mysql表数据到data.txt文件 mysql> sel ...

  4. JDBC使用Java反射万能查询Oracle表数据、插入数据——【JDBC编程】

    JDBC使用反射智能查询Oracle表数据 JDBC编程中使用反射技术,动态获取Oracle表数据 1.反射的概念 2.构建Oracle数据库连接方法,关闭方法--便于调用 静态常量类: Oracle ...

  5. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  6. Vue将echarts数据导出成excel文件

    Vue将echarts数据导出成excel文件 一.下载vendor插件 下载 vendor 文件放置项目的 src 目录下 链接:https://pan.baidu.com/s/1XYYQ186zo ...

  7. vue导出excel加一个进度条_vue项目中如何把数据导出成excel文件

    Loading... 关于vue中如何把数据导出成excel文件 ### 1. 安装依赖 ``` yarn add file-saver yarn add xlsx yarn add script-l ...

  8. 报表如何批量导出成 excel 文件

    需求说明 报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出 ...

  9. mongoDB如何将数据导成csv文件?

    mongoDB如何将数据导成csv文件? 1.代码如下: 2.详细参数如下 -h:mongo地址 -u:用户名 -p:密码 --port:端口号 -d:数据库 -c:collection --quer ...

最新文章

  1. Java引用类型有哪些
  2. Entity Framework Core 执行SQL语句和存储过程
  3. 再说共识性算法Raft
  4. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld
  5. 趣图:SQL 版的喝椰汁,没想到吧
  6. Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0 和launch screens may not set custom classnames报错
  7. Oracle External Table学习
  8. 十四步实现拥有强大AI的五子棋游戏
  9. 第二工业大学计算机应用大专录取分,2016年上海第二工业大学专科层次依法自主招生各专业分数线...
  10. cmt obm odm 代工模式oem_ODM/OEM/OBM的区别
  11. 走吧走吧,拿着更多的票子把活干吧!
  12. SWUST OJ 99:Euclid‘s Game
  13. win10自带vc运行库吗?
  14. [Oracle] 自定义数据类型Type
  15. 使用python爬取图书封面
  16. 计算机与科学技术专业毕业设计,计算机科学与技术专业毕业设计论文
  17. OKRs-E,OKR实战基础理论
  18. 切尔西对阵巴塞罗那的欧冠半决赛
  19. Android集成银联支付
  20. 基于机器学习的共享单车需求量影响因素的数据可视化分析

热门文章

  1. NULL和NUL的区别
  2. SSH java 面试题
  3. 翻译 Duckietown an Open, Inexpensive and Flexible Platform for Autonomy Education and Research
  4. ​Word文档的隐藏功能​
  5. 联想电脑ctrl + r 快捷键无法使用
  6. vue 图片 404 显示默认图片
  7. 菜鸟学习Python+Selenium遇到的第一个要崩溃的问题
  8. 路由器工作原理及配置实验
  9. 赔97.6万元!腾讯一程序员违反竞业协议,三年白干了!
  10. Windows 文件夹修改为exe的原理和解决办法