回答編集履歴
1
参考情報を追加
test
CHANGED
@@ -25,3 +25,55 @@
|
|
25
25
|
> find_or_initialize_byメソッドはfind_or_create_byと同様に動作しますが、createの代りにnewを呼ぶ点が異なります。つまり、モデルの新しいインスタンスは作成されますが、その時点ではデータベースに保存されていません。
|
26
26
|
|
27
27
|
> ...
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
追加 2016-06-19 23:20
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
merge についての参考情報:
|
36
|
+
|
37
|
+
- バルク SQL を使用して複数レコードを変数に格納してからループ処理を行うサンプル [http://hensa40.cutegirl.jp/archives/1451](http://hensa40.cutegirl.jp/archives/1451)
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
- 単一の操作によるデータの挿入およびデータの更新 [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)
|
42
|
+
|
43
|
+
> ...
|
44
|
+
|
45
|
+
> DB2 のプログラミング
|
46
|
+
|
47
|
+
> MERGE ステートメントを使用すれば、単一の操作によって既存のデータを更新し、新規データを挿入できます。
|
48
|
+
|
49
|
+
> ...
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
- Oracle SQL SELECT [http://itref.fc2web.com/oracle/sql/select.html](http://itref.fc2web.com/oracle/sql/select.html)
|
54
|
+
|
55
|
+
> ...
|
56
|
+
|
57
|
+
> FOR UPDATE
|
58
|
+
|
59
|
+
> ...
|
60
|
+
|
61
|
+
> 条件に一致するレコードが表にあれば更新、なければ挿入(新規追加)する場合、普通にSELECTしてレコードが無かったらUPDATEするという方法では、SELECT時にレコードが存在してもUPDATE時にそのレコードがまだ存在している保証はない。そこで、SELECT FOR UPDATEを使うと、レコードロックがかかり、UPDATEするまで削除されない。なお、SELECT FOR UPDATEを実行した場合、コミットするまでロックされたままなので注意が必要である。Oracle 9i以降ではMERGE文を使用するのが望ましい。
|
62
|
+
|
63
|
+
> ...
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
- oracle 不思議な呪文MERGE [http://you-sk.hateblo.jp/entry/2015/07/10/080750](http://you-sk.hateblo.jp/entry/2015/07/10/080750)
|
68
|
+
|
69
|
+
> ...
|
70
|
+
|
71
|
+
> 「りんご」は価格更新(UPDATE)、「めろん」は新商品(INSERT)として扱いたいと思います。 テーブルを結合させた無名カーソルを用いて、旧価格が取れた(NOT NULL)なら更新、そうでなければ追加…というロジックでPL/SQLで素直にコーディングしてみました。
|
72
|
+
|
73
|
+
> ...
|
74
|
+
|
75
|
+
> これをMERGEで書き換えると…
|
76
|
+
|
77
|
+
> ...
|
78
|
+
|
79
|
+
|