最近因為項目需要,打算寫一個批處理程序,更新數據庫中的表數據。寫了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暫無環境,請自行測試。