【问题标题】:'ORA-00911: invalid character' when SQL statement has semi-colon in the middle of the string'ORA-00911: invalid character' 当 SQL 语句在字符串中间有分号时
【发布时间】:2014-06-20 11:29:49
【问题描述】:

有没有人在使用带有“;”的 SQL 语句进行 sql.execute('...') (1) 调用时遇到 java.sql.SQLSyntaxErrorException: ORA-00911: invalid character (分号)字符。我知道尾随分号会导致 ORA-00911,正如这里建议的 2 所以我已经把它们去掉了)

这是一个这样的 SQL 语句的示例:

INSERT INTO metadata_property_qualifier(id,version,metadata_property_id,name,overridable,propagated,to_instance,to_subclass,translatable,type,value,value_type)
    VALUES (mpr_qualifier_sequence.nextval,0,(select id from metadata_property where metadata_class_id
    IN (select id from metadata_class where name = 'UIM_DXTPMLanSwitchError')
    AND metadata_property.name='CollisNumberValidity'),'ValueMap',0,0,0,0,0,'[Ljava.lang.String;',unistr('0\00a31'),19)

请注意,[Ljava.lang.String; 中有 ; 字符。 有没有办法逃避分号或以某种方式解决它?

代码sn-p:

sqlFile.eachLine() {
    log.info it
    if(!it.startsWith('--') && !it.trim().isEmpty()) {
        try {                       
            sql.execute(it - ';')
        } catch(ex) {
            log.error ex
            log.info "Rolling back the transaction..."
            sql.dataSource.connection.rollback()
        }
    }
}

【问题讨论】:

  • 副手,好像这样应该没问题。你能包括你的整个代码sn-p吗?
  • Mureinik,我更新了描述。感谢您查看。

标签: sql jdbc groovy groovy-sql


【解决方案1】:

使用- (minus) 只会替换第一个匹配项。如果您的 SQL 中有多个分号,则需要使用 replaceAll()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多