Groovy-处理异常-如何获取Oracle错误代码

时间:2018-12-12 13:25:50

标签: groovy jmeter

我正在jMeter测试计划中运行Groovy脚本,例如:

import groovy.sql.*;
import java.sql.*;
import oracle.jdbc.driver.OracleTypes;

def url = vars['url']
def user = vars['user']
def password = vars['password']
def driver = vars['driver']
def sql = Sql.newInstance(url, user, password, driver)

try{
    def result = sql.call("{? = call MY_FUNCTION(?,?)}", [Sql.NUMERIC, vars.get('MY_VAR'), 'MY_PARAM']);
} catch (Exception ex) {

    log.error "getMsg: " + ex.getMessage(); 
}

finally{
    sql.close();
}

,它会在异常情况下返回整个Oracle错误消息:

  

ORA-00001:违反了唯一约束(constraint_name)...等等

如何仅获取Oracle特定的错误代码号,例如。 “ ORA-00001”或“ 00001”或“ 1”(最好不使用正则表达式或子字符串)?

我尝试使用OracleDatabaseException类,但是Groovy似乎无法处理它。

1 个答案:

答案 0 :(得分:1)

  1. 如果您不希望使用正则表达式,则可以使用SQLException.getErrorCode()函数,例如:

    } catch (SQLException ex) {
    
        log.error "getMsg: " + ex.getErrorCode()
    }
    
  2. 但是,如果错误不是SQLException或派生错误,则上述catch块将不起作用。因此,为了安全起见,您可以像这样使用Groovy Find Operator =~

    } catch (Exception ex) {
        println("getMsg: " + (ex.getMessage() =~ "(ORA-\\d+)")[0][0])
    }
    

查看Apache Groovy - Why and How You Should Use It文章,以了解有关JMeter测试中Groovy脚本的更多信息。