歡迎您光臨本站 註冊首頁

使用Shell腳本快速完成SQL腳本中重複枯燥的任務

←手機掃碼閱讀     火星人 @ 2014-03-22 , reply:0

1.具體需求
現有成百上千個SQL腳本文件,每個文件中均包含數量不等的insert語句。為保證在腳本執行過程中有一個比較友好的輸出提示,需要在insert語句的前後添加一些輔助信息(類似於PL/SQL Developer中導出insert語句功能所提供的頭尾信息)。
2.待處理SQL腳本一例
insert into t values (1);
insert into t values (2);
insert into t values (3);
3.若按照需求完成輔助信息添加后的效果如下
-- 2009-11-05 17:39:30 Generated by Seccooler.
set feedback off
set define off
prompt Loading t ...
insert into t values (1);
insert into t values (2);
insert into t values (3);
prompt 3 records loaded
set feedback on
set define on
4.文件數量眾多時將會遇到的問題
如果僅僅只有這一個文件或只有比較少的幾個待編輯的文件,完全可以通過手工來完成。但,如果待編輯的文件成百上千,並且內容條數有長有短,「手工作坊」的方式顯然不合適了。至少會出現如下的問題。
1)人類的體力是有限的,很有可能在大量反覆的情況下體力枯竭;
2)人類的精力是有限的,很有可能在大量反覆的情況下精神崩潰;
2)即使體力無限,精力無限,在短暫的生命里也有可能無法完成任務,因為一個人可能無法在地球上存在超過1000年;
3)人類這種動物是極易犯錯誤的,尤其是在枯燥的重複同樣的工作的情況下犯錯誤是不可避免的,這也符合「墨菲定律」;
4)其他問題請您自己補充。
5.告別「手工作坊」迎接「自動化時代」
$ vi format.sh
1 #!/bin/bash
2 for x in `find . -name "*.sql"`
3 do
4 echo "-- `date +"%Y-%m-%d %H:%M:%S"` Generated by Seccooler." > temp
5 echo "set feedback off" >> temp
6 echo "set define off" >> temp
7 echo "" >> temp
8 v_table_name=`head -1 $x | awk '{print $3}'`
9 echo "prompt Loading $v_table_name ..." >> temp
10 echo "" >> temp
11 cat $x |sed "s/^M//g" >> temp
12 echo "" >> temp
13 v_count=`grep -i "Insert into " $x | wc -l`
14 echo "prompt $v_count records loaded" >> temp
15 echo "set feedback on" >> temp
16 echo "set define on" >> temp
17 mv temp $x
18 done
~
腳本編寫的思路是:用最簡單的思路解決一個具體的問題。
重點解釋幾點:
第2行:自動化的體現,使用shell的for循環找到所有待處理的SQL腳本文件;
第4行:列印一行時間的標籤,並註釋是誰生成的腳本;
第8-9行:使用變數v_table_name得到表名,列印輸出表名的信息;
第11行:去掉DOS下的行尾回車符號「^M」;
第13-14行:統計SQL腳本中一共存在多少條insert語句;
第17行:通過中間文件temp實現覆寫原SQL腳本文件。
6.腳本使用演示
從此再也不用為這個枯燥的體力工作苦惱了。當前文件夾及子文件夾中包含的腳本文件越多,越能發揮出腳本的強大功能。
$ sh format.sh
$ cat test.sql
-- 2009-11-05 17:39:30 Generated by Seccooler.
set feedback off
set define off
prompt Loading t ...
insert into t values (1);
insert into t values (2);
insert into t values (3);
prompt 3 records loaded
set feedback on
set define on
7.小結
如果發現一項任務需要反覆的重複同樣的內容,那麼這項工作一定可以使用一些自動化的手段來加速完成。
如果是單獨對同一個文件的進行反覆執行同樣的編輯操作,那麼可以考慮錄製一段宏來完成。
如果是對多個文件反覆執行同樣的編輯任務,則可以考慮使用shell腳本來加速任務的完成。

[火星人 ] 使用Shell腳本快速完成SQL腳本中重複枯燥的任務已經有348次圍觀

http://coctec.com/docs/linux/show-post-105304.html