2014-09-04 82 views
-1

爲sqlplus,在UNIX中,我們使用連接到sqlplus中正常的程序是這樣的如何連接使用perl腳本

sqlplus ${user}/${password}@${server} my_file.sql >> $Logfile 2>&1 

其中IM附加在上面的命令所有的信息到日誌文件$Logfile

現在在Perl我知道如何連接到在sqlplus和執行一個SQL腳本,我用像

system("sqlplus -L ${user}/${password}@${server} my_file.sql") 

但使用system我們不能發送n信息到一個日誌文件,它只會給出返回狀態,我想跟蹤執行的命令的信息,就像我們在unix中做的那樣。有沒有辦法做到這一點。請幫助謝謝

+0

爲什麼你不能使用系統(「SQLPLUS -L $ {用戶}/$ {密碼} \ @ $ {}服務器my_file.SQL >> $ Logfile 2>&1「) – Jens 2014-09-04 14:53:58

+0

我可以在perl中使用嗎?讓我試試 – user2647888 2014-09-04 14:56:05

回答

5

這是更好的訪問使用DBIDBD::Oracle數據庫,而非炮擊了運行交互式工具的SQL * Plus

但是,如果你堅持創建一個單獨的進程來操縱你的數據庫,那麼傳遞給system的相同命令將獲得相同的結果。

我假設你想要在標誌@在字面上呢?像這樣

system("sqlplus -L ${user}/${password}\@${server} my_file.sql >> $Logfile 2>&1") 

或者你可以使用反引號:

open my ($log_fh), '>', $Logfile; 

print $log_fh `sqlplus -L ${user}/${password}\@${server} my_file.sql`; 
+0

非常感謝Borodin對Perl完全陌生這是當你的主管將你置於與你完全陌生的東西時所發生的事情,假設unix和perl是相同的:)反正非常感謝你的任何懷疑生病回到你 – user2647888 2014-09-04 15:07:40

+0

@ user2647888:不客氣。一般來說,如果可能的話,出於幾個原因,在Perl中本地執行某些操作比使用'system'調用shell或外部程序要好得多。 – Borodin 2014-09-04 15:10:15

+0

如果你正在努力開始使用'DBI',那麼我們可以幫助,如果你告訴我們'my_file.sql'的內容 – Borodin 2014-09-05 14:29:19