无效字符在哪里? oracle 11g简单的sql

时间:2014-04-01 19:13:39

标签: sql ruby oracle activerecord oracle11g

我使用oracle 11G和OJDBC6.jar适配器。当我尝试运行这个非常简单的insert语句时,它会抛出一个无效的字符异常。

ActiveRecord::JDBCError: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
: insert into user_defaults values (8526547125,'H214Qa99547')

我的gemfile如下:

gem 'activerecord', '4.0.4'
gem 'ActiveRecord-JDBC', '0.5'
gem 'activerecord-jdbc-adapter', '1.3.6'

这是在Oracle 11g上使用OJDBC6.jar

4 个答案:

答案 0 :(得分:1)

这可能与推断的列顺序有关吗?尝试指定列以消除任何歧义:

INSERT INTO user_defaults (user_id, home_office_id)
VALUES (8526547125, 'H214Qa99547')

答案 1 :(得分:0)

  1. 检查查询是否能够直接在开发人员工具中执行,而不是通过java执行。 如果查询失败,请检查无效数据类型并进行更正。
  2. 如果在开发人员工具中成功执行查询,那么编码可能会出现一些问题
    1. 在传递的字符串中检查查询终结符字符串,如半冒号。
    2. 尝试在java程序中使用SOP在插入之前打印查询。

答案 2 :(得分:0)

过去,我被超出范围的ASCII刻录了。最好排除这一点,特别是如果你已经尝试过其他你能想到的事情。

删除并重新键入整行。删除后删除粘贴线的诱惑。如果那里有一个不可打印的ASCII字符,它将摆脱它。

确保对与SQL语句交互的任何代码行执行此操作,无论是在变量中构建字符串还是实际传递参数以运行查询。

答案 3 :(得分:0)

在数据库配置文件中添加此行statement_escape_processing: true,如下所示。这应该排序问题

development:
  adapter: jdbc
  driver: oracle.jdbc.OracleDriver
  statement_escape_processing: true