Gaucheのmysqlのdbdを使って、Gauche状からmysqlのデータベースに対してINSERTするときのお話(メモ)です。
- 「エラーにしたくない」だけであれば……
mysqlの機能を使って、”INSERT IGNORE …” というSQLとすれば一意性制約違反になるようなレコードは挿入されず捨てられエラーとはならない。
- ちゃんと捕まえるためには……
例外を捕まえて、その中で一意性制約違反の場合の処理を入れます。具体的には以下のようなコードとする必要がある。
(guard (e
((<dbi-error> e)
(if (= (condition-ref e 'error-code) 1062)
unique-error ;; ここが一意性制約違反
(raise e)))
(else (raise e)))
(dbi-execute hogehoge-sql))
1062 というのが、一意性制約違反のエラーコードとなる。(MySQL :: MySQL 4.1 リファレンスマニュアル :: 12.1 返されるエラー 参考)
# SQLSTATEを取得する方法って無いのかな???