"ORA-00911: недопустимый символ", когда в операторе SQL точка с запятой находится в середине строки

Кто-нибудь сталкивался java.sql.SQLSyntaxErrorException: ORA-00911: invalid character при изготовлении sql.execute('...') ( 1) вызов с оператором SQL, который имеет ';' (точка с запятой) символы в середине. Я знаю, что запятая точка с запятой вызывает 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; имеет ; характер в этом. Есть ли способ избежать точки с запятой или как-то обойти это?

Фрагмент кода:

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()
        }
    }
}

1 ответ

С помощью - ( минус) заменяет только первое вхождение. Если у вас есть несколько точек с запятой в вашем SQL, вы захотите использовать replaceAll(),

Другие вопросы по тегам