在perl中执行sql-loader as命令时捕获sql-loader异常

时间:2016-10-10 08:59:41

标签: perl sql-loader backticks

我们正在使用如下命令执行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>

1 个答案:

答案 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()