使用jRuby,warbler,active-record和oracle时出错

时间:2014-10-31 12:52:57

标签: activerecord jdbc jruby warbler

我使用warbler从我的jRuby项目中制作JAR文件。 当我在jRuby本身运行我的代码时,如

jRuby.exe -S test_jdbc.rb 
一切正常。 当我把它弄乱并且我有我的test_jdbc.jar文件时,我在运行JAR时遇到错误。

产生错误的代码是

#table is in other scheme than the connected scheme so, i have to use both the scheme and the tablename
class Ondon < ActiveRecord::Base
  self.table_name    = 'xxxxxxxx.xxxxx'
  self.sequence_name = 'xxxxxxxx.xxxxxxx'
end

dossier = Ondon.where(rnr13: rnr, dossier_nr: dosnr)
p dossier

错误:org.jruby.embed.EvalFailedException:(StatementInvalid)ActiveRecord :: JDBCError:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在

产生错误的sql就像

SELECT "schemename"."tablename".* FROM "schemename"."tablename"  WHERE "schemename"."tablename"."fieldname" = .. etc

如果我在例如SqlPlus中运行此SQL,我会得到相同的错误

ORA-00942: table or view does not exist

如果我删除了SqlPlus中scheme-table-和fieldnames周围的引号,那么sql运行正常。

如何避免此错误?

这里使用的程序和宝石

OS: Windows7
jdbcdriver: ojdbc6.jar
jRuby: 1.7.4
activerecord: 4.1.1
activerecord-jdbc-adapter: 1.3.11
warbler:1.4.4

1 个答案:

答案 0 :(得分:1)

你只需要用self.table_name = 'xxxxxxxx.xxxxx'声明正确的大小写...如果它是在没有引号的情况下创建的,那么存储的名称可能是大写的,例如的 OTHER_SCHEMA.MY_TABLE