如何使用perl脚本连接到sqlplus

如何使用perl脚本连接到sqlplus,perl,unix,Perl,Unix,在unix中,我们用于连接sqlplus的正常过程如下 sqlplus ${user}/${password}@${server} my_file.sql >> $Logfile 2>&1 其中,im将上述命令中的所有信息附加到日志文件$Logfile 现在在perl中,我知道如何连接到sqlplus并执行我使用的sql脚本 system("sqlplus -L ${user}/${password}@${server} my_file.sql") 但是使用syst

在unix中,我们用于连接sqlplus的正常过程如下

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
我们不能将信息发送到日志文件,它只会给出返回状态。我想像在unix中一样跟踪已执行命令的信息。有什么方法可以做到这一点吗。请帮助,谢谢

使用和访问数据库比使用SQL*Plus交互式工具更好

但是,如果您坚持创建一个单独的进程来操作数据库,那么传递给
系统的相同命令将获得相同的结果

我假设你想把at标志
@
按字面意思放在那里?像这样

system("sqlplus -L ${user}/${password}\@${server} my_file.sql >> $Logfile 2>&1")
或者您可以使用backticks:

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

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

为什么不能使用系统(“sqlplus-L${user}/${password}\@${server}my_file.SQL>>$Logfile 2>&1”),我可以在perl中这样使用吗?让我试着说很多,我对perl完全陌生这就是当你的线索让你陷入一种完全陌生的东西时会发生的情况假设unix和perl是一样的:)无论如何,谢谢你,任何疑问,我都会回来的u@user2647888:不客气。一般来说,如果可能,出于几个原因,在Perl中以本机方式执行某些操作比使用
system
调用shell或外部程序要好得多。如果您正在努力开始使用
DBI
,那么我们可以帮助您向我们展示
my_文件的内容。sql
Hi Borodin my sql文件可以像
从中选择“xxx”一样简单DUAL
现在我怀疑我的sql是否有任何错误,我希望它出现在$log\u fh中。。可以吗?那么您肯定需要使用
DBI
。请看一下文档。顺序是
DBI->connect
$dbh->prepare
$sth->execute
,如果语句是
选择
,则执行一次或多次
$sth->fetch
。它非常干净,尽管模块文档可能看起来很吓人,因为有很多选项。