oracle_enhanced_adapter를 통해 연결하는 읽기 전용 oracle 데이터베이스에서 Ruby on Rails 3.0으로 작업하고 있습니다.레일 3과 오라클 : NLS 설정에서 소수 구분 기호를 사용하지 않음
알려진 "n + 1 쿼리"문제로 돌아가서 나는 includes 메소드를 시도했습니다.
레일 가이드의 설명과 달리 생성 된 두 번째 쿼리는 필수 ID를 정수가 아닌 부동 소수점 값의 문자열 표현으로 나열했습니다. 원래 ID는 NUMBER 유형입니다.
불행히도 NLS 설정 데이터베이스는 소수점 구분 기호로 ","가 필요하다고 생각되는 을 포함하여 독일의 경우입니다. 그래서 나는 항상 ORA-01722 오류 as described here을 얻습니다. 더 정확하게
:
@var.assoc.includes(:another_assoc).where("column_1 = ?", some_value)
수익률
(이것은 "기호로 문자열"과 같은 몇 가지 산만 세부 사항을 포함하기 때문에 내가 위의 레일 코드를 단순화했다 변환)ActiveRecord::StatementInvalid: OCIError: ORA-01722: invalid number: SELECT "TABLE_A".* FROM "TABLE_A" WHERE ("TABLE_A"."ID" IN ('1715.0','1716.0','1717.0','1718.0','1719.0','1720.0','1721.0'))
언급 한대로 데이터베이스는 읽기 전용이므로 사용하면
alter session set nls_numeric_characters = '.,'
데이터베이스에서 직접 작업했습니다. 그러나 레일 세션을 변경하는 올바른 방법을 찾을 수 없었습니다.
내가 찾은 모든 것이 레일즈 2를 참조하거나 사용되지 않는 기능을 사용하는 것으로 보입니다.
레일즈 3.0에서 어떻게 해결할 수 있습니까?
또는 Rails (또는 oracle_enhanced_adapter)가 나열된 모든 ID를 Fixnum으로 변환하려면 어떻게해야합니까?
감사와 안부, 팀
우리는 오라클을 사용하여 동일한 문제가 있고, 우리는 초기화 (config/initializers/something.rb
에 배치)에 다음 코드를 배치하여 그것을 해결
안녕하세요, Tim, 안녕하세요. 이 문장을 생성하는 레일 코드를 게시 해주십시오. – Patrick