簡體   English   中英

如何在Perl中打開外部命令(sqlplus)並連續使用它而無需重新啟動

[英]How to open external command(sqlplus) and use it continuously without restart in Perl

我是Perl腳本的初學者。 並且正在編寫打開外部命令(sqlplus)的perl腳本。 我想使用預先設置打開sqlplus,並定期獲取會話信息。 也就是說,用(oradebug setmypid)和(oradebug direct_access set mode = unsafe)打開sqlplus之后,我想連續發送檢索查詢(oradebug direct_access select * from x \\ $ ksuse \\ n),而無需重新啟動sqlplus。

以下代碼可能使您更好地理解我的問題

my $set = "oradebug setmypid;\n oradebug direct_access set mode=unsafe;\n oradebug direct_access select * from x\$ksuse\n";
open(PIPE, '|-', "/opt/oracle/product/11.2.0/db_1/bin/sqlplus -prelim system/oracle as sysdba");

print PIPE $set;    #if I call this call continuously, it means I open sqlplus again, again...This is not what I want^^

打開sqlplus一次后,有什么方法可以連續運行檢索查詢嗎?

先感謝您

一般來說, Expect具有相當的能力。 與交互式shell命令交互時,要處理許多復雜的事情,Expect可以為您處理其中的許多問題。

但是我必須問您是否確定這是最好的方法(從perl與sqlplus進行接口連接)? 我對Oracle專家的了解還不足以了解您的代碼想要實現的目標,但是您是否嘗試過sqlplus start語法

query.sql

oradebug setmypid;
oradebug direct_access set mode=unsafe;
oradebug direct_access select * from x$ksuse;
exit;

在外殼中:

/opt/oracle/product/11.2.0/db_1/bin/sqlplus -prelim system/oracle as sysdba @query >data.txt

這會將data.txt和結果一起放在當前的工作目錄中。

另外,perl DBI也相當有能力,盡管我必須說我不明白您的代碼正在嘗試做什么,所以我不知道DBI是否能夠為您提供幫助。 Google是您的朋友。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM