在perl中打开一个管道进程(sqlplus)并从查询中获取信息?

Piz*_*zra 3 sql unix perl sqlplus

基本上,我想open使用Perl管道到sqlplus,发送查询然后从查询中获取信息.

当前代码:

open(PIPE, '-|', "sqlplus user/password@server_details");

while (<PIPE>) {
    print $_;
}
Run Code Online (Sandbox Code Playgroud)

这允许我跳转到sqlplus并运行我的查询.

我弄清楚的是如何让Perl向sqlplus发送查询(因为它始终是相同的查询),一旦完成,我怎样才能将信息写回我的Perl脚本中的变量?

PS - 我知道DBI...但我想知道如何使用上面的方法做到这一点,因为它是不优雅的:)


对代码进行了一些更改,现在我可以将我的查询发送到sqlplus但它已断开连接 ......我不知道如何从中获取结果.

my $squery = "select column from table where rownum <= 10;"

# Open pipe to sqlplus, connect to server...
open(PIPE, '|-', "sqlplus user/password@server_details") or die "I cannot fork: $!";
# Print the query to PIPE?
print PIPE $squery;
Run Code Online (Sandbox Code Playgroud)

是不是STDOUT从sqlplus 抓取然后使用Perl(父)脚本存储它?

基本上,我想将它存储在一个数组中以便稍后进行解析.

流程图:

Perl脚本(父) - >打开管道进入sqlplus(子) - >在管道上打印查询 - > sqlplus在屏幕上输出结果(STDOUT?) - >将STDOUT读入Perl脚本中的数组(父)


编辑:可能是使用此方法将进程分配到sqlplus可能不可行,我将不得不使用DBI.等着看其他人是否回答......

dax*_*xim 5

忘记屏幕抓取,Perl有一个完美的数据库接口.