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

参考リンク:
dbd.mysql | DBI | dev | Kahua Project

コメントを残す

メールアドレスが公開されることはありません。