Oracle 如何在Perl中打开外部命令(sqlplus)并连续使用它而无需重新启动

Oracle 如何在Perl中打开外部命令(sqlplus)并连续使用它而无需重新启动,oracle,perl,sqlplus,Oracle,Perl,Sqlplus,我是Perl脚本的初学者。我正在编写打开外部命令sqlplus的perl脚本。 我想使用prelim设置打开sqlplus,并定期获取会话信息。也就是说,在使用oradebug setmypid和oradebug direct_access set mode=unsafe打开sqlplus后,我想从x\$ksuse\n连续发送检索查询radebug direct_access select*,而不重新启动sqlplus 下面的代码可能会让您更好地理解我的问题 my $set = "oradebu

我是Perl脚本的初学者。我正在编写打开外部命令sqlplus的perl脚本。 我想使用prelim设置打开sqlplus,并定期获取会话信息。也就是说,在使用oradebug setmypid和oradebug direct_access set mode=unsafe打开sqlplus后,我想从x\$ksuse\n连续发送检索查询radebug direct_access select*,而不重新启动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一次后,是否有任何方法可以连续运行检索查询

提前谢谢你

总的来说,我很能干。当与交互式shell命令交互时,需要处理很多复杂的问题,Expect可以为您处理其中的许多问题

然而,我必须问您是否确定从perl与sqlplus接口是最好的方法?作为一名Oracle专家,我还不足以理解您的代码想要实现什么,但您是否尝试过

在query.sql中:

在壳牌:

/opt/oracle/product/11.2.0/db_1/bin/sqlplus -prelim system/oracle as sysdba @query >data.txt
这将把data.txt和您的结果放在当前工作目录中

另外,perl DBI也相当有能力,尽管我必须说我不明白您的代码试图做什么,所以我不知道DBI是否能够帮助您做到这一点。谷歌是你在这里的朋友


希望这有帮助

请考虑,因为每一个服务器安装都附带了它。感谢您的快速响应。但是我只是编辑我的问题。如果你能在这个问题上给我帮助,我将非常感激我认为Expect是你在这里的最佳选择。它将执行sqlplus命令一次,并帮助您以编程方式与sqlplus命令的stdin和stdout交互。让你开始吧,谷歌会为你找到更多。
/opt/oracle/product/11.2.0/db_1/bin/sqlplus -prelim system/oracle as sysdba @query >data.txt