Мне нужно получить значение, возвращенное sproc DB2, которое я написал. Sproc возвращает количество строк в таблице и используется вызывающим процессом, чтобы решить, обновлять или нет другие данные.
Я рассмотрел несколько похожих вопросов о SO, но они касаются использования параметров out вместо использования возвращаемого значения sproc, например:
Perl Dbi и хранимые процедуры
Я использую стандартное подключение DBI к базе данных с включенными RaiseError и PrintError.
$sql_stmt = "call MY_TABLE_SPACE.MY_SPROC('2011-10-31')";
$sth = $dbh->prepare($sql_stmt)
or die "Unable to prepare SQL '$sql_stmt': $rps_met_dbh->errstr";
$rsp = 0;
$rsp = $sth->execute();
unless($rsp) {
print(STDERR "Unable to execute sproc: $rps_met_dbh->errstr\n");
}
print(STDERR "$?\n");
Я попытался посмотреть на $ h-> err как для дескриптора оператора, так и для дескриптора db.
Я бы действительно предпочел сообщить число строк с помощью кода возврата, а не использовать механизм SQLSTATE, если смогу.
Edit:
Я закончил использовать выделенный параметр out, чтобы сообщить количество строк, обновленных следующим образом:
$sql_stmt = "call MY_TABLE_SPACE.MY_SPROC('2011-10-31')";
$sth = $dbh->prepare($sql_stmt)
or die "Unable to prepare SQL '$sql_stmt': $rps_met_dbh->errstr";
$sth = $dbh->bind_param_inout(1, $rows_updated, 128)
or die "Unable to prepare SQL '$sql_stmt': $rps_met_dbh->errstr";
$rows_updated = 0;
$rsp = 0;
$rsp = $sth->execute();
unless($rsp) {
print(STDERR "Unable to execute sproc: $rps_met_dbh->errstr\n");
}
print(STDERR "$rows_updated\n");
Редактировать 2:
И теперь, подумав об этом, я понял, что должен применять принцип PragProg «Скажи. Не спрашивай». То есть я не должен называть спрок. затем попросите его вернуть мне номер, прежде чем я решу, звонить ли другому человеку или нет, то есть «спросить».
Я должен просто позвонить первому спрокеру. и пусть он решит, должен ли он вызывать другого спрока или нет, то есть «скажет», и пусть решит.