実現したいこと
rails5でoracle dbに対し、gem activerecord-importを使用してbulk insertを試してみましたが、
insertクエリが複数個流れてしまいます。下記のような状態です。
INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム) INSERT INTO "USERS" ("ID", ...以降その他カラム) VALUES (users_seq.nextval, ...以降その他カラム)
これを1つのINSERTとして実行することは可能でしょうか?
もしご存知の方いらっしゃいましたら、恐れ入りますがご教示お願い致します。
実現不可の場合はその旨記載していただけると助かります。
発生している問題と試したこと
以下のソースで
ruby
1 Users.import users_array
※users_arrayは
[
{id: 1, user_name: "test1"},
{id: 2, user_name: "test2"}
]
という形式を想定しています。
Gemfileの状態が
・gem 'activerecord-import' のみ
INSERTのクエリが1文ずつ実行されてしまう。
件数は特に関係がなかった、10件でも1万件でも同じ。
・gem 'activerecord-import-oracle_enhanced' のみ
undefind method 'import' エラーとなる。
・下記の両方を記載
gem 'activerecord-import'
gem 'activerecord-import-oracle_enhanced'
undefined method `to_sym' for [#ここにカラム名がいくつか表示される#]:Array Did you mean? to_s to_set というエラーになる。
その他
・git-hub activerecord-import-oracle_enhanced
を見ると、トリガの作成が必要とのことなので
plsql
1CREATE OR REPLACE TRIGGER [テーブル名]_TRG 2 BEFORE INSERT ON [テーブル名] 3 FOR EACH ROW 4BEGIN 5 IF :NEW.ID IS NULL THEN :NEW.ID := [テーブル名]_SEQ.NEXTVAL; 6 END IF; 7END; 8/
というトリガを作成しています。
⇒2019/02/13 追記:activerecord-importでbulk insertをする際にもしかして使用される?と思い上記トリガを作成した次第です。オートインクリメントをoracle側で実現するための措置であり、今回の件では不要と理解しました。ありがとうございます。
・テーブルにはIDカラムはあります。
補足情報(FW/ツールのバージョンなど)
・ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
・Rails 5.1.5
・Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
回答4件
あなたの回答
tips
プレビュー