2014-03-27 77 views
4

我必須一次運行多個SQL腳本文件。想要在SQLPLUS中一次運行多個SQL腳本文件

就像我每次都在sqlplus

 
SQL>@d:\a.txt 
SQL>@d:\a2.txt 
SQL>@d:\a3.txt 
SQL>@d:\a4.txt 

寫命令時,有沒有辦法把所有的文件一個文件夾&運行一氣呵成的所有腳本文件中,而不會錯過像@d:\final.txt@d\final.bat

任何單個文件
+0

你試過windows批處理文件嗎? (打開記事本,按順序逐行寫入命令),然後將文件保存爲FileName.bat(確保從保存對話框的底部選擇了「所有文件」選項。通過雙擊運行批處理文件可以解決問題。或者您可能需要在該bat文件中使用一些高級批處理命令 –

回答

5

沒有單個SQL * Plus命令來做到這一點,但您可以創建一個調用所有其他腳本的腳本:

將以下內容放入批處理文件中

@echo off 
echo.>"%~dp0all.sql" 
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql" 

當您運行批處理文件,它會創建一個在批處理文件所在的同一目錄中名爲all.sql新的腳本。它將在批處理文件所在的同一目錄中查找擴展名爲.sql的所有文件。

然後,您可以運行使用sqlplus user/pwd @all.sql所有腳本(或擴展批處理文件創建all.sql腳本之後調用sqlplus

+0

@rahuljain:抱歉,我不知道您在說什麼。 –

+0

我跑了批處理文件。 all.sql文件創建正常。我打開這個文件,這個文件的代碼是「D:\ test_SQL \ Patch03.01.486.txt」 @「D:\ test_SQL \ Patch03.01.487.txt」 @「D:\ test_SQL \ Patch03.01.488.txt」 如果我運行文件像@ all.sql這會工作正常嗎? 我必須在prod –

1

這裏是類似的解決辦法,但你不必迭代,並有特殊的格式化的SQL文件名稱。你組成一個sql文件並運行一次。

cat table_animal.sql > /tmp/temp.sql 
cat table_horse.sql >> /tmp/temp.sql 
cat table_fish.sql >> /tmp/temp.sql 
sqlplus USERNAME/[email protected] @/tmp/temp.sql 
+1

中運行這個所有txt文件。同樣,如果要連接目錄中的所有SQL文件,可以使用'cat * .sql> temp.sql'。 – DavidS

0

一些技巧和命令可以幫助您生成master.sql文件,您可以從該位置運行。

c:\direcotory_location\dir *.sql /-t /b >master.sql 

去開master.sql打開使用記事本++ 刪除master.sql線,並使用正則表達式的父目錄替換

\n with \n @ 

去到CMD 從CMD

C:\root_directory\sqlplus user/password @master.sql 

我發現這個過程非常方便,如果我有30到40個腳本放在一個目錄中。

1

如果您使用GNU Linux,你可以使用process substitution

sqlplus USERNAME/[email protected] < <(cat a.txt a2.txt a3.txt a4.txt) 
# ... or a for loop on input files, inside the process substitution 

或者,你可以創建一個.pdc文件,列出你的SQL腳本:

-- pdc file 
@a.txt; 
@a2.txt; 
@a3.txt; 
@a4.txt; 

和調用SQL加:

sqlplus USERNAME/[email protected] < my_scripts.pdc 
0

對於Windows請嘗試 警察y/b * .sql + x final.sql

sqlplus user/password @ final.sql

相關問題