sqlplus 執行大量sql指令碼時遇到問題分析(很常見)
sqlplus -s / as sysdba <
@test.sql
EOF
第二個EOF前面有沒有exit效果都一樣。 也就是說預設就是exit
test.sql裡最後加不加commit效果都一樣,exit預設的時候就是提交(這個可以控制)
test.sql 名字如果是帶空格t est.sql,怎麼辦?
(下面是好多sql檔案進行遍歷)
【1】
cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <
@"$line"
EOF
【2】
cat database.sh
for line in `ls *sql` ;do
sqlplus -s / as sydsba <
@"$line"
EOF
done
用while迴圈,而不用for in 是因為如果檔名有空格,ls *sql出來以後,line取值是按照空格或者換行符作為間隔符號,
所以一個檔名會被空格分成為2個值使用;而用while read 則是隻按照換行符作為間隔符號,所以一個檔名不會被分割。這就是這兩種方式的區別。
下面的sqlplus 下面執行@"line",變數line需要加雙引號,防止檔名被空格分割解析
sqlplus 的兩種方式對比對比:
【1】
#cat test.sql
insert into test values(sysdate);
commit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <
@"$line"
EOF
上面的exit退出動作是由EOF完成的
【2】
#cat test.sql
insert into test values(sysdate);
commit;
exit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba @"$line"
上面的exit退出動作,只能在test.sql中完成。
在這種情況下如果不在test.sql中加exit,那麼迴圈會在第一次sqlplus 執行的時候阻塞,直到被手工處理以後,才能進入到下一次迴圈。
@test.sql
EOF
第二個EOF前面有沒有exit效果都一樣。 也就是說預設就是exit
test.sql裡最後加不加commit效果都一樣,exit預設的時候就是提交(這個可以控制)
test.sql 名字如果是帶空格t est.sql,怎麼辦?
(下面是好多sql檔案進行遍歷)
【1】
cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <
@"$line"
EOF
【2】
cat database.sh
for line in `ls *sql` ;do
sqlplus -s / as sydsba <
@"$line"
EOF
done
用while迴圈,而不用for in 是因為如果檔名有空格,ls *sql出來以後,line取值是按照空格或者換行符作為間隔符號,
所以一個檔名會被空格分成為2個值使用;而用while read 則是隻按照換行符作為間隔符號,所以一個檔名不會被分割。這就是這兩種方式的區別。
下面的sqlplus 下面執行@"line",變數line需要加雙引號,防止檔名被空格分割解析
sqlplus 的兩種方式對比對比:
【1】
#cat test.sql
insert into test values(sysdate);
commit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <
@"$line"
EOF
上面的exit退出動作是由EOF完成的
【2】
#cat test.sql
insert into test values(sysdate);
commit;
exit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba @"$line"
上面的exit退出動作,只能在test.sql中完成。
在這種情況下如果不在test.sql中加exit,那麼迴圈會在第一次sqlplus 執行的時候阻塞,直到被手工處理以後,才能進入到下一次迴圈。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-1096885/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlplus執行指令碼時遇到錯誤自動停止SQL指令碼
- 一個“指令碼執行夯死”問題的分析指令碼
- 常見面試SQL問題面試SQL
- 多執行緒併發常見問題執行緒
- 使用bat指令碼執行MySQL命令時遇到的坑BAT指令碼MySql
- sonar常見問題分析
- SQL Server常見問題收集SQLServer
- iOS開發執行報錯、常見問題iOS
- mybatis執行sql指令碼MyBatisSQL指令碼
- SQL SERVER執行指令碼SQLServer指令碼
- 安裝oracle11g遇到的執行root.sh指令碼問題Oracle指令碼
- 如何分析Sonar常見問題?
- Python操作SAP時候遇到的一些常見問題Python
- 【多執行緒】常見問題簡單總結執行緒
- 線上定時指令碼執行慢,分析過程指令碼
- JDBC用ResultSet訪問大量資料時會遇到的問題JDBC
- 執行 shell 指令碼 \r 問題解決指令碼
- Mysql執行批量sql時的格式問題MySql
- hp-ux環境sqlplus中使用@執行sql指令碼報錯UXSQL指令碼
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- ssh執行遠端指令碼遇到的坑指令碼
- 前端自動指令碼中常見的幾個問題,你遇到了嗎?前端指令碼
- 使用sqlplus批量執行指令碼的總結SQL指令碼
- SQL常見提問~SQL
- RunLoop原始碼分析、基本使用場景和常見問題OOP原始碼
- 訊息佇列常見問題分析佇列
- MyCAT的常見問題分析和解決
- Jedis介紹及常見問題分析
- SQL常見面試題SQL面試題
- 請教個問題執行 httprunner 遇到的問題HTTP
- SQL Server資料庫中處理空值時常見問題SQLServer資料庫
- 學習WebFlux時常見的問題WebUX
- CodeReview常見程式碼問題View
- 多執行緒-多執行緒常見的面試題執行緒面試題
- MongoDB常見問題解答:時間與時區MongoDB
- 執行docker run所遇到的問題Docker
- javascript指令碼何時被執行JavaScript指令碼