2014-09-04 71 views
-1

为sqlplus,在UNIX中,我们使用连接到sqlplus中正常的程序是这样的如何连接使用perl脚本

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我们不能发送n信息到一个日志文件,它只会给出返回状态,我想跟踪执行的命令的信息,就像我们在unix中做的那样。有没有办法做到这一点。请帮助谢谢

+0

为什么你不能使用系统(“SQLPLUS -L $ {用户}/$ {密码} \ @ $ {}服务器my_file.SQL >> $ Logfile 2>&1“) – Jens 2014-09-04 14:53:58

+0

我可以在perl中使用吗?让我试试 – user2647888 2014-09-04 14:56:05

回答

5

这是更好的访问使用DBIDBD::Oracle数据库,而非炮击了运行交互式工具的SQL * Plus

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

我假设你想要在标志@在字面上呢?像这样

system("sqlplus -L ${user}/${password}\@${server} my_file.sql >> $Logfile 2>&1") 

或者你可以使用反引号:

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

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

非常感谢Borodin对Perl完全陌生这是当你的主管将你置于与你完全陌生的东西时所发生的事情,假设unix和perl是相同的:)反正非常感谢你的任何怀疑生病回到你 – user2647888 2014-09-04 15:07:40

+0

@ user2647888:不客气。一般来说,如果可能的话,出于几个原因,在Perl中本地执行某些操作比使用'system'调用shell或外部程序要好得多。 – Borodin 2014-09-04 15:10:15

+0

如果你正在努力开始使用'DBI',那么我们可以帮助,如果你告诉我们'my_file.sql'的内容 – Borodin 2014-09-05 14:29:19