回答編集履歴
1
参考情報を追加
answer
CHANGED
@@ -11,4 +11,29 @@
|
|
11
11
|
> COMMIT
|
12
12
|
> ...
|
13
13
|
> find_or_initialize_byメソッドはfind_or_create_byと同様に動作しますが、createの代りにnewを呼ぶ点が異なります。つまり、モデルの新しいインスタンスは作成されますが、その時点ではデータベースに保存されていません。
|
14
|
-
> ...
|
14
|
+
> ...
|
15
|
+
|
16
|
+
追加 2016-06-19 23:20
|
17
|
+
|
18
|
+
merge についての参考情報:
|
19
|
+
- バルク SQL を使用して複数レコードを変数に格納してからループ処理を行うサンプル [http://hensa40.cutegirl.jp/archives/1451](http://hensa40.cutegirl.jp/archives/1451)
|
20
|
+
|
21
|
+
- 単一の操作によるデータの挿入およびデータの更新 [http://www.ibm.com/support/knowledgecenter/ja/SSEPEK_11.0.0/com.ibm.db2z11.doc.apsg/src/tpc/db2z_insertupdateoperation.html](http://www.ibm.com/support/knowledgecenter/ja/SSEPEK_11.0.0/com.ibm.db2z11.doc.apsg/src/tpc/db2z_insertupdateoperation.html)
|
22
|
+
> ...
|
23
|
+
> DB2 のプログラミング
|
24
|
+
> MERGE ステートメントを使用すれば、単一の操作によって既存のデータを更新し、新規データを挿入できます。
|
25
|
+
> ...
|
26
|
+
|
27
|
+
- Oracle SQL SELECT [http://itref.fc2web.com/oracle/sql/select.html](http://itref.fc2web.com/oracle/sql/select.html)
|
28
|
+
> ...
|
29
|
+
> FOR UPDATE
|
30
|
+
> ...
|
31
|
+
> 条件に一致するレコードが表にあれば更新、なければ挿入(新規追加)する場合、普通にSELECTしてレコードが無かったらUPDATEするという方法では、SELECT時にレコードが存在してもUPDATE時にそのレコードがまだ存在している保証はない。そこで、SELECT FOR UPDATEを使うと、レコードロックがかかり、UPDATEするまで削除されない。なお、SELECT FOR UPDATEを実行した場合、コミットするまでロックされたままなので注意が必要である。Oracle 9i以降ではMERGE文を使用するのが望ましい。
|
32
|
+
> ...
|
33
|
+
|
34
|
+
- oracle 不思議な呪文MERGE [http://you-sk.hateblo.jp/entry/2015/07/10/080750](http://you-sk.hateblo.jp/entry/2015/07/10/080750)
|
35
|
+
> ...
|
36
|
+
> 「りんご」は価格更新(UPDATE)、「めろん」は新商品(INSERT)として扱いたいと思います。 テーブルを結合させた無名カーソルを用いて、旧価格が取れた(NOT NULL)なら更新、そうでなければ追加…というロジックでPL/SQLで素直にコーディングしてみました。
|
37
|
+
> ...
|
38
|
+
> これをMERGEで書き換えると…
|
39
|
+
> ...
|