ORACLE相关的SHELL编程
生活随笔
收集整理的這篇文章主要介紹了
ORACLE相关的SHELL编程
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
近段時(shí)間,做了些為ORACL數(shù)據(jù)庫(kù)管理相關(guān)的SHELL腳本編程。
????? 其實(shí),SHELL功能非常強(qiáng)大,基本可以覆蓋操作系統(tǒng)的所有角落。
????? PL/SQL同樣也非常強(qiáng)大,可以解決ORACLE數(shù)據(jù)庫(kù)的眾多問(wèn)題。
????? 但有時(shí)這兩個(gè)強(qiáng)大的“家伙”混合在一起后,就會(huì)多少變得棘手些。就像我,可能做數(shù)據(jù)庫(kù)時(shí)間長(zhǎng)了,很多東西都想通過(guò)數(shù)據(jù)庫(kù)實(shí)現(xiàn)。但有時(shí)超過(guò)了數(shù)據(jù)庫(kù)的范疇,就不靈光了。
????? 我還是想說(shuō)幾點(diǎn)問(wèn)題:
????? 1.該SHELL實(shí)現(xiàn)的部分或者該數(shù)據(jù)庫(kù)實(shí)現(xiàn)的應(yīng)該想想清楚,否則你的SHELL腳本越寫(xiě)越痛苦。
???? 有段代碼,我想將SHELL中的變量,放在SQLPLUS中的SQL語(yǔ)句中操作。但是著實(shí)的碰到了問(wèn)題。因?yàn)槲业腟QL語(yǔ)句是對(duì)字符串進(jìn)行操作:
???? substr($v_para,(instr($v_para,'A') + 1)??? 有諸如這樣的SQL,這時(shí)ORACLE就會(huì)報(bào)錯(cuò),通過(guò)跟蹤可以發(fā)現(xiàn):
??? v_para這個(gè)變量的值為 1111A2222B333(舉例),在SQL中直接引用,結(jié)果發(fā)現(xiàn)實(shí)際的SQL是這樣的:
substr(1111A2222B333,(instr(1111A2222B333,'A') + 1)????? 我們不難發(fā)現(xiàn)沒(méi)有了單引號(hào)!如果做SHELL比較敏感的朋友就會(huì)想到:單引號(hào)在SHELL中意味著什么。為了單引號(hào)我必須使用轉(zhuǎn)義符(\)。但是在使用轉(zhuǎn)義符后,實(shí)際上這個(gè)SQL又變成了
substr(\'1111A2222B333\',(instr(\'1111A2222B333\','A') + 1)???? 對(duì),越來(lái)越錯(cuò)。最后想了又想,還是直接通過(guò)PL/SQL操作,也是可以完成的。
??? 2.在SHELL中的一些特殊符號(hào),在SQLPLUS中特殊的作用會(huì)消失。
????? 例如,我在SPOOL結(jié)果集到文本中時(shí),對(duì)文件名稱(chēng)使用了雙引號(hào)中帶變量的做法。
????? “$machine_id”????? 結(jié)果輸出的文件名上還帶著雙引號(hào),例如:"50001".txt
????? 所以要格外注意,當(dāng)然最為保險(xiǎn)的是在實(shí)際環(huán)境中進(jìn)行測(cè)試!
??????
????? 3.數(shù)據(jù)庫(kù)管理人員,多學(xué)習(xí)學(xué)習(xí)SHELL會(huì)對(duì)自己的工作受益良多。當(dāng)然如果可以再多多深入學(xué)習(xí)當(dāng)然操作系統(tǒng)對(duì)自己的幫助就會(huì)更大,這樣的前提是身邊一定要有一個(gè)好的SA(我共事的SA就非常優(yōu)秀!多謝這位仁兄(Cityhunter)的大力幫助)。
?????
????? 最后看看這篇文章,算是個(gè)拋磚引玉的小文吧。
????? 利器和尖刀,一個(gè)也不能少。 -:)
???
????? 其實(shí),SHELL功能非常強(qiáng)大,基本可以覆蓋操作系統(tǒng)的所有角落。
????? PL/SQL同樣也非常強(qiáng)大,可以解決ORACLE數(shù)據(jù)庫(kù)的眾多問(wèn)題。
????? 但有時(shí)這兩個(gè)強(qiáng)大的“家伙”混合在一起后,就會(huì)多少變得棘手些。就像我,可能做數(shù)據(jù)庫(kù)時(shí)間長(zhǎng)了,很多東西都想通過(guò)數(shù)據(jù)庫(kù)實(shí)現(xiàn)。但有時(shí)超過(guò)了數(shù)據(jù)庫(kù)的范疇,就不靈光了。
????? 我還是想說(shuō)幾點(diǎn)問(wèn)題:
????? 1.該SHELL實(shí)現(xiàn)的部分或者該數(shù)據(jù)庫(kù)實(shí)現(xiàn)的應(yīng)該想想清楚,否則你的SHELL腳本越寫(xiě)越痛苦。
???? 有段代碼,我想將SHELL中的變量,放在SQLPLUS中的SQL語(yǔ)句中操作。但是著實(shí)的碰到了問(wèn)題。因?yàn)槲业腟QL語(yǔ)句是對(duì)字符串進(jìn)行操作:
???? substr($v_para,(instr($v_para,'A') + 1)??? 有諸如這樣的SQL,這時(shí)ORACLE就會(huì)報(bào)錯(cuò),通過(guò)跟蹤可以發(fā)現(xiàn):
??? v_para這個(gè)變量的值為 1111A2222B333(舉例),在SQL中直接引用,結(jié)果發(fā)現(xiàn)實(shí)際的SQL是這樣的:
substr(1111A2222B333,(instr(1111A2222B333,'A') + 1)????? 我們不難發(fā)現(xiàn)沒(méi)有了單引號(hào)!如果做SHELL比較敏感的朋友就會(huì)想到:單引號(hào)在SHELL中意味著什么。為了單引號(hào)我必須使用轉(zhuǎn)義符(\)。但是在使用轉(zhuǎn)義符后,實(shí)際上這個(gè)SQL又變成了
substr(\'1111A2222B333\',(instr(\'1111A2222B333\','A') + 1)???? 對(duì),越來(lái)越錯(cuò)。最后想了又想,還是直接通過(guò)PL/SQL操作,也是可以完成的。
??? 2.在SHELL中的一些特殊符號(hào),在SQLPLUS中特殊的作用會(huì)消失。
????? 例如,我在SPOOL結(jié)果集到文本中時(shí),對(duì)文件名稱(chēng)使用了雙引號(hào)中帶變量的做法。
????? “$machine_id”????? 結(jié)果輸出的文件名上還帶著雙引號(hào),例如:"50001".txt
????? 所以要格外注意,當(dāng)然最為保險(xiǎn)的是在實(shí)際環(huán)境中進(jìn)行測(cè)試!
??????
????? 3.數(shù)據(jù)庫(kù)管理人員,多學(xué)習(xí)學(xué)習(xí)SHELL會(huì)對(duì)自己的工作受益良多。當(dāng)然如果可以再多多深入學(xué)習(xí)當(dāng)然操作系統(tǒng)對(duì)自己的幫助就會(huì)更大,這樣的前提是身邊一定要有一個(gè)好的SA(我共事的SA就非常優(yōu)秀!多謝這位仁兄(Cityhunter)的大力幫助)。
?????
????? 最后看看這篇文章,算是個(gè)拋磚引玉的小文吧。
????? 利器和尖刀,一個(gè)也不能少。 -:)
???
總結(jié)
以上是生活随笔為你收集整理的ORACLE相关的SHELL编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【参与开源】J2EE开源项目JEECG快
- 下一篇: 在 MyEclipse 5.1GA 上使