我正在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似乎无法处理它。
答案 0 :(得分:1)
如果您不希望使用正则表达式,则可以使用SQLException.getErrorCode()函数,例如:
} catch (SQLException ex) {
log.error "getMsg: " + ex.getErrorCode()
}
但是,如果错误不是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脚本的更多信息。