首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中将sql-loader作为命令执行时捕获sql-loader异常

在perl中将sql-loader作为命令执行时捕获sql-loader异常
EN

Stack Overflow用户
提问于 2016-10-10 16:59:41
回答 1查看 464关注 0票数 0

我们使用如下命令在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`不是一个选择。

EN

回答 1

Stack Overflow用户

发布于 2016-10-10 17:49:46

如果您想要捕获程序写入STDOUT的内容,建议使用反记号来运行外部程序。如果您没有捕获由反刻度返回的数据(在标量变量或数组中),那么您就使用了错误的工具。

如果您希望获得程序的返回值,则需要使用system()。但是,从system()返回的值中提取外部程序的实际返回值需要一些工作。documentation for system()这样说:

返回值是等待调用返回的程序的退出状态。要获得实际的退出值,请向右移位8(见下文)。

下面提到的可能就是这个代码示例(它实际检查的是$?,而不是system()返回的值):

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39954691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档