特定の状況で例外が発生する挿入で実行されるテーブルにトリガー関数があります。
私は、トランザクションを作成してテーブルに行を挿入する、Catalyst で実行されている古い Perl アプリケーションを維持しています。
トリガー関数が例外を発生させたときに、スローしたエラー メッセージだけを出力し、デバッグ情報 (データベース操作、コンテキスト、perl ファイルなど) を出力できないようにしたいと考えています。
たとえば、関数が次のようなものをスローするとします。
raise exception 'Item with id % cannot be shipped at this time.', new.id;
見たいだけ
ID 13 の商品は現在発送できません。
ではない
DBIx::Class::Row::insert(): DBI 例外: DBD::Pg::st の実行に失敗しました: エラー: ID 13 のアイテムは現時点で出荷できません。[ステートメント "INSERT INTO ... at /home/../lib/Class/Controller/Inv.pm 行 260 の場合
perlコードは現在次のようなものです
$c->model('Class')->schema->txn_do(sub {
...
eval {
$shipment->insert;
1;
} or do {
$error = $@;
last;
};
if ($error) {
$c->stash->{error} = $error;
}
);
ありがとうございました。