我们使用如下命令在perl中执行sql-loader:
`sqlldr $db_arg control=$ctl data=$data log=$log bad=$bad`;
但是通过这种方式,我们无法发现sql-loader是否抛出任何异常。
例如:-即使数据有30,000条记录,并且在加载1,000条记录后遇到问题,我们也只能得到1,000条记录已加载的消息。
有没有办法找出sql-loader是否抛出了异常,以及具体抛出了什么异常。
注意:计算数据文件中的行数被证明是相当昂贵的,因为文件必须在一些旧的Windows Server以及Unix服务器上执行,所以使用`wc`不是一个选择。
发布于 2016-10-10 17:49:46
如果您想要捕获程序写入STDOUT的内容,建议使用反记号来运行外部程序。如果您没有捕获由反刻度返回的数据(在标量变量或数组中),那么您就使用了错误的工具。
如果您希望获得程序的返回值,则需要使用system()。但是,从system()返回的值中提取外部程序的实际返回值需要一些工作。documentation for system()这样说:
返回值是等待调用返回的程序的退出状态。要获得实际的退出值,请向右移位8(见下文)。
下面提到的可能就是这个代码示例(它实际检查的是$?,而不是system()返回的值):
if ($? == -1) {
print "failed to execute: $!\n";
}
elsif ($? & 127) {
printf "child died with signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $? >> 8;
}https://stackoverflow.com/questions/39954691
复制相似问题