最近因为项目需要,打算写一个批处理程序,更新数据库中的表数据。写了3个sql文件:a.sql,b.sql,c.sql,在这三个文件中,实现了创建表,并向表中插入数据的操作。
目前我通过SQLPLUS可以执行一个SQL文件,例如:
sqlplus test/test@test @a.sql
如何在一个批处理文件中,按顺序执行三个sql文件。
我新建了一个a.bat文件,在文件中填写
sqlplus test/test@test @a.sql
@b.sql
@c.sql
执行文件a.bat,只是执行文件a.sql,执行完文件a.sql,不继续执行后边的文件,如何才能顺序执行批处理中的多个sql文件中的语句呢。
于是到网上找找,我能遇到的问题,别人应该也有遇到的,所以就查到了如下:
解决方案:
在Windown环境中:
首先把所有的sql文件准备好,具体每个文件里面的内容这里就不列出来了。
再准备一个全部执行的sql文件,我暂时叫它All.sql,内容如下:
--@Y:\表\a.sql --@Y:\表\b.sql --@Y:\表\c.sql @Y:\表\receive28.sql @Y:\表\receivetcs.sql @Y:\表\receiveattachment.sql @Y:\表\ContainerLists.sql @Y:\表\DocumentAttachedInformationList.sql @Y:\表\edocrealation.sql @Y:\表\EntryContainerInformationList.sql @Y:\表\EntryIdentityInformationList.sql @Y:\表\EportLocationInformationList.sql @Y:\表\GoodsInformationList.sql @Y:\表\LogisticsLocationInformationLis.sql @Y:\表\main.sql exit
语法和平时sql语法相同,可以用“–”注释某些不用的表,最后的exit表示顺序执行完成后则推出sqlplus环境。
然后再写一个a.bat文件,内容很简单,如下:
::sqlplus system/oracle@xe @all.sql>log.txt sqlplus system/oracle@xe @all.sql
里面写了两行,第一行可用于执行过程中的信息保存到log.txt文件中,如果不需要保存日志信息,则可以使用第二行的代码
在Linux环境中:
可以把bat文件写成下面这样就行了
sqlplus -S /nolog <<EOF conn test/test@test @a.sql @b.sql @c.sql EOF
本人只在Windows环境中测试可以使用,Linux暂无环境,请自行测试。