で使用できるブロックSYBASE
など、のエラーを処理する方法はありますか?TRY-CATCH
MS SQL Server
Oracle
Webを検索しましたが、見つかった唯一のオプションはグローバル変数でしたが、@@error
期待どおりに機能しませんでした。たとえば、次のコードです。
begin tran
update table1
set name = 'new name'
where name = 'old name'
update table2
set id = 1
where id = 30
-- suppose id has a unique constraint and there's already a row with id = 1
IF @@error = 0
begin
print 'commited'
commit
end
else
begin
print 'rolled back'
rollback
end
table1で変更した名前は、ここでテストした古い値を保持しているため、実際に何らかの形でロールバックしますが、メッセージを出力したり、エラーの原因となった命令の後に入力した命令を実行したりすることはありません。
誰かがこれで私を助けることができますか?Sybaseのエラー処理が実際にどのように機能するか知っていますか?