我有一个Perl脚本需要调用IBM db2来处理一些命令。麻烦的是每次调用都会破坏db2连接
这不起作用:
$> db2 connect to foo
$> perl -e 'print `db2 list tables for schema bar|some_filter`;'
也不是这样:
$> perl -e 'print `db2 connect to foo`; print `db2 list tables for schema bar|some_filter`;'
也不是这样:
$> perl -e 'print `db2 connect to foo && db2 list tables for schema bar|some_filter`;'
在每种情况下,连接在第二个命令执行时都会丢失。
这有效:
#!/usr/bin/perl
print `db2 connect to foo`;
print `db2 list tables for schema bar`;
但这不是:
#!/usr/bin/perl
print `db2 connect to foo`;
print `db2 "select count * from bar"`;
解决方法是从Perl生成一个bash脚本并执行它,但直接执行它会更好。有办法吗?
答案 0 :(得分:2)
为什么不使用DBI
而不是shell脚本?然后,您可以根据需要维护连接并重用现有连接。
答案 1 :(得分:2)
db2
的每个单独调用必须重新连接才能对数据库执行任何操作,并且当调用结束时,连接将终止。因此,您的观察行为是可以预期的。
如果您使用的是Perl,请认真考虑使用DBI。
如果这不是一个选项,那么你需要考虑从你的Perl脚本中运行db2
程序作为一个子进程,通过一个管道通向它,你可以在其上编写命令和一个从它返回的管道。您需要将命令写入db2
,然后才能解析返回的数据,以便了解它何时完成响应并处理错误消息和数据。必须有模块(可能是核心模块IPC::Open3或IPC::Open2)。