近段時間,做了些為oracl資料庫管理相關的shell指令碼程式設計。
其實,shell功能非常強大,基本可以覆蓋作業系統的所有角落。
pl/sql同樣也非常強大,可以解決oracle資料庫的眾多問題。
但有時這兩個強大的「傢伙」混合在一起後,就會多少變得棘手些。就像我,可能做資料庫時間長了,很多東西都想通過資料庫實現。但有時超過了資料庫的範疇,就不靈光了。
我還是想說幾點問題:
1.該shell實現的部分或者該資料庫實現的應該想想清楚,否則你的shell指令碼越寫越痛苦。
有段**,我想將shell中的變數,放在sqlplus中的sql語句中操作。但是著實的碰到了問題。因為我的sql語句是對字串進行操作:
substr($v_para,(instr($v_para,
'a') + 1)
有諸如這樣的sql,這時oracle就會報錯,通過跟蹤可以發現:
v_para這個變數的值為 1111a2222b333(舉例),在sql中直接引用,結果發現實際的sql是這樣的:
substr(1111a2222b333,(instr(1111a2222b333,
'a') + 1)
我們不難發現沒有了單引號!如果做shell比較敏感的朋友就會想到:單引號在shell中意味著什麼。為了單引號我必須使用轉義符(\)。但是在使用轉義符後,實際上這個sql又變成了
substr(\
'1111a2222b333\',(instr(\
'1111a2222b333\',
'a') + 1)
對,越來越錯。最後想了又想,還是直接通過pl/sql操作,也是可以完成的。
2.在shell中的一些特殊符號,在sqlplus中特殊的作用會消失。
例如,我在spool結果集到文字中時,對檔名稱使用了雙引號中帶變數的做法。
「$machine_id」
結果輸出的檔名上還帶著雙引號,例如:"50001".txt
所以要格外注意,當然最為保險的是在實際環境中進行測試!
3.資料庫管理人員,多學習學習shell會對自己的工作受益良多。當然如果可以再多多深入學習當然作業系統對自己的幫助就會更大,這樣的前提是身邊一定要有乙個好的sa(我共事的sa就非常優秀!多謝這位仁兄(cityhunter)的大力幫助)。
最後看看
這篇文章,算是個拋磚引玉的小文吧。
利器和尖刀,乙個也不能少。 -:)
linux下的shell 和python編寫
第一句即指定指令碼直譯器 bin bash usr bin env python3或 which python3的哪個 usr bin python3 執行兩種方法 第一種編寫完 直接bash s.sh python3 s.py 第二種賦加x chmod a x s.sh chmod 777 s.p...
Linux實驗 Linux下的shell程式設計
某單位的系統管理員計畫用shell程式設計編寫乙個程式實現usb裝置的自動掛載。程式的功能如下 運算程式時,提示使用者輸入 y 或 n 確定是不是掛載usb裝置。如果使用者輸入 y 則掛載這個usb裝置。提示使用者輸入 y 或 n 確定是不是複製文字。如果使用者輸入 y 則顯示檔案列表,然後提示使用...
LeetCode上稀缺的四道shell程式設計題解析
leetcode 192 題目描述 1.words.txt只包括小寫字母和 2.每個單詞只由小寫字母組成。3.單詞間由乙個或多個空格字元分隔。words.txt 檔案內容 the day is sunny the thethe sunny is is輸出 以詞頻降序排列 the 4is 3sunny...