惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
The Blog of Author Tim Ferriss
S
Securelist
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tor Project blog
S
Schneier on Security
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
AWS News Blog
AWS News Blog
F
Fortinet All Blogs
C
Cisco Blogs
L
LangChain Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
T
The Exploit Database - CXSecurity.com
The GitHub Blog
The GitHub Blog
月光博客
月光博客
量子位
A
Arctic Wolf
博客园 - 叶小钗
L
LINUX DO - 热门话题
J
Java Code Geeks
The Hacker News
The Hacker News
Security Latest
Security Latest
V
Vulnerabilities – Threatpost
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
T
Tenable Blog
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
Simon Willison's Weblog
Simon Willison's Weblog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threat Research - Cisco Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
PCI Perspectives
PCI Perspectives
Hacker News: Ask HN
Hacker News: Ask HN
P
Palo Alto Networks Blog
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
O
OpenAI News
P
Privacy International News Feed
P
Privacy & Cybersecurity Law Blog
N
Netflix TechBlog - Medium

博客园 - Eric-Liu

Docker Desktop for Windows ChatGLM本地部署 Llama本地部署 StableDiffusion本地部署 Python-CUDA-cuDNN安装 Python实现视频桌面 基于BERT进行文本分类 Python实现Windows下的视频壁纸 启用VTX技术支持启动android的虚拟机 - 报错 新机上岗 Core i7-4790 @ 3.60GHz 四核 / 16 GB ( 金士顿 DDR3 1866MHz ) / GeForce GTX 970 ( 4 GB / 七彩虹 ) VBS发送邮件-1 Oracle数据库编译存储过程挂死问题解决办法 Windows 7丢失用户、密码解决办法-我体验了! Windows Gadget开发之运行外部程序 - Eric-Liu - 博客园 VirtualBox自动重启之谜 拆分五笔字库,提高导入到google拼音的速度 写个设置命令的VBS脚本工具。 - Eric-Liu - 博客园 CMD下一个命令遍历目录删除相同垃圾文件 SQL注入之脚本篇-FOR ACCESS数据库
批处理实现从Excel导入Oracle
Eric-Liu · 2010-04-17 · via 博客园 - Eric-Liu

之前做过一个从Oracle导出到Excel的批处理,简单点说就是通过Sqlplus将表数据Spool到一个文本文件中或简化的Excel格式文档中,而这里我要做的事恰好相反,工具则是使用sqlldr, sqlldr的用法没有研究太多,这里主要用写写如何使用批处理来调用实现导入的自动化过程。

主要工作涉及到以下几块:

1. 将Excel转换成csv格式的文件,这里要借助工具xls2csv.exe实现excel到csv的转换;

xls2csv的用法: xls2csv excelfile.xls gbk

以上命令执行后,程序会将excel文件中的每一张sheet都生成一个csv文件,并以excel文件的名字_sheet名字.csv命名

2. 使用Sqlldr将数据导入Oracle,

Sqlldr的用法:sqlldr user/pass@tnsname control=example.ctl data=data.csv

以上命令执行后,sqlldr会将data.txt数据文件中数据按照control指定的规则插入到数据库中,具体的插入规则和表名都在control文件中指定。

Control文件写法:

load data
infile 'data.csv'
append
into table t_tab_data
fields terminated by ';' optionally enclosed by '"'
(
filed1,
filed2,
filed3
)

以上语法文件中指定了从文件data.csv中导数据,导入到表t_tab_data中,

fields terminated by ';' optionally enclosed by '"' 表示数据文件中字段以;分隔,各字段中的"忽略掉,这些规则也可以写到各字段后,分别对各字段进行约束。

另外,Control文件中的infile ‘data.csv’也可以写成infile ‘*', 这样data.csv中的数据可以直接放到control文件的最后,sqlldr会在读完control文件的规则部分后,再去读取数据部分导入数据库。

3. 将上面要做的工作写成批处理

@Echo Off
Color 0A
Title Network Config Assistant By Eric
Pushd %CD%
Prompt $G
MODE CON COLS=100 LINES=30
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
Set OraUserPass=icd/icd@Eric

Echo 1. Start importing table list to database...
Echo ========================================================

Set /P xlsfilename=table List in Excel format(tables.xls as default):
IF /I "%xlsfilename%"=="" Set xlsfilename=tables.xls

Echo Generating csv file for table list from excel...
start /min /wait xls2csv.exe %xlsfilename% gbk

FOR /F %%i in ('DIR /B *.CSV /O:-D') DO (
    SET FILENAME=%%i
    GOTO :EXITFOR
)

:EXITFOR
Echo Generate csv file "%FILENAME%" successfully.

Echo/

Set tmptableTab=t_test_table

REM ==================Check table for table Configed in IEX=================
Echo Start checking table !tmptableTab!...
Echo select * from !tmptableTab! where 1^<^>1;>%temp%/tmpCheckTab.sql
Echo exit;>>%temp%/tmpCheckTab.sql
Sqlplus %OraUserPass% @"%temp%/tmpCheckTab.sql" | find /I "ERROR">NUL && IF errorlevel 0  (
    Echo Table !tmptableTab! is not exist.
    CALL :CreatetableTable
    Goto :tableClear
)

REM ==================Truncate table t_test_table================
Echo Table !tmptableTab! is already exist.
Echo/

Echo Truncating table !tmptableTab!...
Echo Truncate table !tmptableTab!;>%temp%/tmpTruncate.sql
Echo Exit>>%temp%/tmpTruncate.sql
Sqlplus %OraUserPass% @"%temp%/tmpTruncate.sql" 1>NUL
Echo Truncate table !tmptableTab! finished.

:tableClear
Echo/
REM ==================Import data from list to db=================
REM ----Generate control file----
Set tmptableCtrlFile="%CD%/table.ctl"

REM Echo load data>%tmptableCtrlFile%
REM Echo infile '%FILENAME%'>>!tmptableCtrlFile!
REM Echo append>>!tmptableCtrlFile!
REM Echo into table icd.t_test_table>>!tmptableCtrlFile!
REM Echo fields terminated by ';' optionally enclosed by '^"'>>!tmptableCtrlFile!
REM Echo (>>!tmptableCtrlFile!
REM Echo tableid,>>!tmptableCtrlFile!
REM Echo tablename,>>!tmptableCtrlFile!
REM Echo tableskill>>!tmptableCtrlFile!
REM Echo ^)>>!tmptableCtrlFile!

Echo Importing data to table !tmptableTab!...
sqlldr %OraUserPass% control=table.ctl 1>NUL
Echo Importing data to table !tmptableTab! finished.

Echo/

REM ============Create table t_test_table================
:CreatetableTable
IF /I "%0"==":CreatetableTable" (
Echo Start creating table !tmptableTab!...
Echo Create table t_test_table ^(>%temp%/tmptableTab.sql
Echo tableid number(5^),>>%temp%/tmptableTab.sql
Echo tablename varchar2(50^),>>%temp%/tmptableTab.sql
Echo tableskill varchar2(2000^)>>%temp%/tmptableTab.sql
Echo ^);>>%temp%/tmptableTab.sql
Echo Exit>>%temp%/tmptableTab.sql

Sqlplus %OraUserPass% @"%temp%/tmptableTab.sql" 1>NUL
Echo Create table !tmptableTab! successfully.
Echo/
Goto :EOF
)

Echo 2. Export data report of discrepancy...
Echo ========================================================
Echo Exporting report from database, please wait...
Start /WAIT ExportBySql.bat %OraUserPass% report.xls
Echo Export report from database finished.
Echo/
Echo/

:EXIT
Pause