Perl Array DML的正确错误处理方法

    以前一直以为自已的处理方法是对的, 在asyncdata脚角正式使用了一次后, 发现还是错了.

    下面一段是原来的处理角本:

my $rv = $delstmt->execute_array({ArrayTupleStatus => \@rowstats});

if (! defined($rv))
{
    # Error processing
    my $updcnt = @rowstats;
    for($i=0;$i<$updcnt;$i++)
    {
       if (ref $rowstats[$i])
       {
           # Error code : $rowstats[$i]->[0]
           # Error mesg : $rowstats[$i]->[1]
           ......
       }
    }
}

    而准确的代码应当是:

my $rv = $delstmt->execute_array({ArrayTupleStatus => \@rowstats});

if (! defined($rv))
{
    if ($delstmt->err())
    {
       # Normal Oracle error, for example table is read only.
       ......
    }
    else
    {
       # Array DML Error processing
       my $updcnt = @rowstats;
       my $j = 0;
       for($i=0;$i<$updcnt;$i++)
       {
          if (ref $rowstats[$i])
          {
              # Error code : $rowstats[$i]->[0]
              # Error mesg : $rowstats[$i]->[1]
              ......
          }
       }
    }
}

    现在已经修复好了, 如果有使用asyncdata角本的, 请重新下载.

发表留言: