我是Perl脚本的初学者。并且正在编写打开外部命令(sqlplus)的perl脚本。 我想打开带有prelim设置的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一次后有没有办法连续运行检索查询?
提前谢谢
答案 0 :(得分:3)
一般来说Expect相当有能力。在与交互式shell命令交互时要处理许多复杂问题,Expect会为您处理许多错误。
但是我必须问你确定这个(与perl的sqlplus接口)是最好的方法吗?我对Oracle专家的了解还不足以理解您的代码想要实现的目标,但是您尝试过sqlplus
start syntax
query.sql
中的:
oradebug setmypid;
oradebug direct_access set mode=unsafe;
oradebug direct_access select * from x$ksuse;
exit;
shell中的:
/opt/oracle/product/11.2.0/db_1/bin/sqlplus -prelim system/oracle as sysdba @query >data.txt
这应该将data.txt
放在当前工作目录中。
另外,perl DBI也很有能力,虽然我必须说我不明白你的代码试图做什么,所以我不知道DBI是否能够帮助你。谷歌是你的朋友。
希望这有帮助!