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を取得する方法って無いのかな???