Столбцы в нижнем регистре и в двойных кавычках в операторе вставки SQL, сгенерированном Rails ActiveRecord с оракулом - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь вставить запись в базу данных Oracle

У меня есть класс, который наследуется от ActiveRecord:

DuplicateTransaction < ActiveRecord::Base
set_table_name "TRANSACTION"

Затем я пытаюсь вставить, используя это:

DuplicateTransaction.create(key_id: '100123', transaction_uuid: '100111',      
expiry_datetime:'CURRENT_DATE', date_modified: 'CURRENT_DATE', date_created:    
'CURRENT_DATE')

SQL, который выходит:

INSERT INTO "TRANSACTION" ("date_created", "date_modified", "expiry_datetime", "id", 
"key_id", "transaction_uuid") 

Двойные кавычки делают имена столбцов чувствительными к регистру и выдают мне ошибку: ActiveRecord :: StatementInvalid (ActiveRecord :: JDBCError: ORA-00904: "action_uuid ": неверный идентификатор

Как можно избавиться от двойных кавычек или использовать имена столбцов с большой буквы?

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Усовершенствованный адаптер Oracle, кажется, правильно обрабатывает вещи для Oracle - https://github.com/rsim/oracle-enhanced

Я попробовал это как в МРТ, так и в JRuby. Он по-прежнему производит имена столбцов в кавычках, но все они в верхнем регистре, например:

jruby-1.6.5.1 :002 > u = User.create(:name => 'james')
SQL (15.0ms)  INSERT INTO "USERS" ("ID", "NAME") VALUES (:a1, :a2)  [["id", 22], ["name", "james"]] => #<User id: 22, name: "james"> 

Моя настройка:

[sodonnel@home testapp]$ jruby -v
jruby 1.6.5.1 (ruby-1.9.2-p136) (2011-12-27 1bf37c2) (OpenJDK 64-Bit Server VM 1.6.0_20) [linuxamd64-java]
[sodonnel@home testapp]$ rails -v
Rails 3.2.1 

Edit:

Также при использовании простого адаптера jdbc все работает нормально на моей установке.

1 голос
/ 15 марта 2012

После просмотра этого похоже, что вам нужно определить псевдоним для столбца (хотя я не пробовал):

alias_attribute :Date_Created, :date_created #or however you need to do the new name
...