我们正在使用如下命令执行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`
不是一种选择。 / p>
答案 0 :(得分:0)
如果要捕获程序写入STDOUT的任何内容,建议使用反向标记来运行外部程序。如果你没有捕获反向标记返回的数据(在标量变量或数组中),那么你使用了错误的工具来完成这项工作。
如果您想获得该程序的返回值,则需要使用 final Popup p = PopupFactory.getSharedInstance().getPopup(myComponent, new JLabel("Here is my popup!"), x, y);
p.show();
// create a timer to hide the popup later
Timer t = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
p.hide();
}
});
t.setRepeats(false);
t.start();
。但是从system()
返回的值中提取外部程序的实际返回值需要一些工作。 documentation for system()
说明了这一点:
返回值是等待调用返回的程序的退出状态。要获得实际退出值,请向右移动八(见下文)。
"以下"提到的可能就是这个代码示例(实际检查system()
而不是$?
返回的值):
system()