oracle表数据导出成unl文件,oracle的文本导入、导出技巧
【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的文本导入、导出技巧相关推荐
- 【GitHubDailyShare】消息导出工具,可将聊天记录导出成 HTML 文件、支持文本、语音、图片、视频、消息
推荐一款开源的微信消息导出工具:WeChat Export,可将聊天记录导出成 HTML 文件.支持文本.语音.图片.视频.消息等资源. GitHub:github.com/luin/wechat-e ...
- Pl/sql 如何将oracle的表数据导出成excel文件?
oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...
- mysql,oracle表数据相互导入
mysql导入oracle: 例如mysql中有ts_user_info表,现在要导入到oracle中的user_info表 1:导出mysql表数据到data.txt文件 mysql> sel ...
- JDBC使用Java反射万能查询Oracle表数据、插入数据——【JDBC编程】
JDBC使用反射智能查询Oracle表数据 JDBC编程中使用反射技术,动态获取Oracle表数据 1.反射的概念 2.构建Oracle数据库连接方法,关闭方法--便于调用 静态常量类: Oracle ...
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...
- Vue将echarts数据导出成excel文件
Vue将echarts数据导出成excel文件 一.下载vendor插件 下载 vendor 文件放置项目的 src 目录下 链接:https://pan.baidu.com/s/1XYYQ186zo ...
- vue导出excel加一个进度条_vue项目中如何把数据导出成excel文件
Loading... 关于vue中如何把数据导出成excel文件 ### 1. 安装依赖 ``` yarn add file-saver yarn add xlsx yarn add script-l ...
- 报表如何批量导出成 excel 文件
需求说明 报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出 ...
- mongoDB如何将数据导成csv文件?
mongoDB如何将数据导成csv文件? 1.代码如下: 2.详细参数如下 -h:mongo地址 -u:用户名 -p:密码 --port:端口号 -d:数据库 -c:collection --quer ...
最新文章
- Java引用类型有哪些
- Entity Framework Core 执行SQL语句和存储过程
- 再说共识性算法Raft
- 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld
- 趣图:SQL 版的喝椰汁,没想到吧
- Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0 和launch screens may not set custom classnames报错
- Oracle External Table学习
- 十四步实现拥有强大AI的五子棋游戏
- 第二工业大学计算机应用大专录取分,2016年上海第二工业大学专科层次依法自主招生各专业分数线...
- cmt obm odm 代工模式oem_ODM/OEM/OBM的区别
- 走吧走吧,拿着更多的票子把活干吧!
- SWUST OJ 99:Euclid‘s Game
- win10自带vc运行库吗?
- [Oracle] 自定义数据类型Type
- 使用python爬取图书封面
- 计算机与科学技术专业毕业设计,计算机科学与技术专业毕业设计论文
- OKRs-E,OKR实战基础理论
- 切尔西对阵巴塞罗那的欧冠半决赛
- Android集成银联支付
- 基于机器学习的共享单车需求量影响因素的数据可视化分析
热门文章
- NULL和NUL的区别
- SSH java 面试题
- 翻译 Duckietown an Open, Inexpensive and Flexible Platform for Autonomy Education and Research
- ​Word文档的隐藏功能​
- 联想电脑ctrl + r 快捷键无法使用
- vue 图片 404 显示默认图片
- 菜鸟学习Python+Selenium遇到的第一个要崩溃的问题
- 路由器工作原理及配置实验
- 赔97.6万元!腾讯一程序员违反竞业协议,三年白干了!
- Windows 文件夹修改为exe的原理和解决办法