• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:oracleでのmerge文のようなもの、ないのでしょうか・・・)

OracleでのMerge文のようなものは存在するか?

このQ&Aのポイント
  • 主キーで検索して、あればupdate、なければinsertという処理を1回のSQLで行いたい場合、OracleでのMerge文のようなものは存在しないようです。
  • 1回で行いたい理由は、他ユーザーが同時実行をして主キー重複が起きないようにするためです。
  • マニュアルを確認した結果、OracleではMerge文に相当する構文は見つかりませんでした。そのため、通常はInsert時のエラー処理と再試行を行う方法を採用することが一般的です。

質問者が選んだベストアンサー

  • ベストアンサー
  • la_pure
  • ベストアンサー率72% (18/25)
回答No.4

こんにちわ。 はずれていたら申し訳ない。 ON DUPLICATE KEY UPDATE というものがあります。 >ON DUPLICATE KEY UPDATE 節(MySQL 4.1.0 の新機能)が指定されている場合に、PRIMARY または UNIQUE キーでの重複値の生成を招くレコードが挿入されると、古いレコードの UPDATE が実行される。次に例を示す。 このあたりがそうかと思います。 参考URLをみてみてください。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/insert.html
motacilla
質問者

お礼

お礼が遅くなり、すみません。  リンクを拝見いたしました。  まさに、やりたいのはソレでした。教えて下さって有り難うございます。    ・・・・・ただ・・・・使用しているバージョンが低いようです。残念。  また、別の環境で使用する時があれば是非使わせていただきたいと思います。  有り難うございました。

その他の回答 (3)

回答No.3

MySQLのバージョンは、何でしょうか? #1さん回答の「PL/SQL」というのはOracleでの名前であり、標準SQLやそれに準じたMySQLでは、ストアドプロシジャやストアドファンクションであり、バージョン5.0からサポートされています。 MySQL 5.0のマニュアルは英文しかなく、使用例も少なかったので、Wikipediaに例題を作成していますので、もしよろしければ一度ご覧ください。

参考URL:
http://ja.wikipedia.org/wiki/CREATE_PROCEDURE
motacilla
質問者

お礼

 お礼が遅くなり、すみません。 バージョンは3.23.58です。  随分古いようですね(*_*)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

プライマリーで判断してよいのであれば、REPLACEでやるとよいでしょう。 http://dev.mysql.com/doc/refman/4.1/ja/replace.html

motacilla
質問者

補足

有り難うございます。  言葉が足りず、申し訳なかったのですが、REPLACEでは、全て上書きされてしまいますよね?  データがあった場合は、他の列はそのままで、更新日時のみupdate という処理を行いたいので、今回はREPLACEは使えないのです・・・  また、Insert Ignoreも、少々違うようで・・・

  • kouta77
  • ベストアンサー率20% (185/896)
回答No.1

こんにちは どういう用途に使うのでしょうか? PL/SQLで簡単なプロシージャーでも作れば、簡単かと思いますが、、、。

motacilla
質問者

補足

有り難うございます。 php + mysqlで使用しております。  データがなければinsert、あれば更新日時のみupdate という処理を行いたいのですが・・・・・

関連するQ&A