Logstash 6.2.1 Oracle JDBC插件查询报ORA-00911无效字符错误求助
解决ORA-00911: invalid character 查询Oracle AUD$_ARCH表的问题
我来帮你捋清楚这个问题——你遇到的ORA-00911错误,主要是因为Oracle对包含特殊字符的对象名(表、列)的处理规则和你用的转义方式不匹配,加上可能还有小细节没注意到。
错误根源分析
你之前尝试用反斜杠\转义表名里的$,但Oracle SQL里反斜杠不是合法的转义字符,它会被当成普通字符解析,这就是为什么第二次尝试还是报错。另外,列名ntimestamp#里的#也属于特殊字符,同样需要正确处理。
正确的语句写法
Oracle中处理包含$、#这类特殊字符的对象名,需要用**双引号""**包裹,而且要注意对象名的大小写(Oracle默认是大写,所以要和实际表/列名一致)。给你两种可行的写法:
- 保留分号(部分驱动支持):
statement => "select * from \"SYS\".\"AUD$_ARCH\" where to_date('01-01-18', 'dd-MM-yy') > \"ntimestamp#\";"
- 去掉末尾分号(更稳妥,很多JDBC/JRuby驱动不需要语句末尾的分号):
statement => "select * from \"SYS\".\"AUD$_ARCH\" where to_date('01-01-18', 'dd-MM-yy') > \"ntimestamp#\""
额外建议
- 年份格式尽量用四位:你用的
'01-01-18'可能会有歧义(Oracle默认可能解析为1918而非2018),改成to_date('01-01-2018', 'dd-MM-yyyy')更安全。 - 如果用
statement_filepath方式,确保文件里的SQL语句同样用双引号包裹特殊对象名,并且不要加多余的分号或其他无关字符。
内容的提问来源于stack exchange,提问作者MauJFernandez
相关产品推荐
相关产品推荐

