[20181203]bash here $.txt

lfree發表於2018-12-03

[20181203]bash here $.txt


--//有時候使用bash程式設計呼叫sqlplus的here.如果指令碼里面sql語句存在$,要轉義一下.

--//如果很多處理起來會比較麻煩.透過例子說明問題:


$ sqlplus -s -l scott/book <<EOF

> set numw 12

> select current_scn from v$database ;

> EOF

select current_scn from v

                        *

ERROR at line 1:

ORA-04044: procedure, function, package, or type is not allowed here


--//v$database 中$database被bash解析為變數.一般常規的做法是轉義一下.


$ sqlplus -s -l scott/book <<EOF

> set numw 12

> select current_scn from v\$database ;

> EOF


 CURRENT_SCN

------------

 13815329111


--//一種做法建立指令碼:

$ cat a.txt

set numw 12

select current_scn from v$database ;

quit


$ sqlplus -s -l scott/book @a.txt

CURRENT_SCN

------------

 13815329331


$ sqlplus -s -l scott/book <<EOF

> $(cat a.txt)

> EOF


 CURRENT_SCN

------------

 13815329287


--//實際上還有另外的做法就是給EOF加入引號,這樣裡面$就不需要轉義.


$ sqlplus -s -l scott/book <<'EOF'

> set numw 12

> select current_scn from v$database ;

> EOF


 CURRENT_SCN

------------

 13815329741

--//注意後面的EOF不需要引號.


$ sqlplus -s -l scott/book <<"EOF"

> set numw 12

> select current_scn from v$database ;

> EOF


 CURRENT_SCN

------------

 13815329823


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2222435/,如需轉載,請註明出處,否則將追究法律責任。

相關文章