尝试在groovy中运行sql语句并将结果存储到def变量中,但遇到以下错误消息:
java.sql.SQLException:ORA-01756:引用的字符串不正确 终止。
这是我的sql语句:
def Indicator = sql.firstRow("SELECT COUNT(*) FROM REQUEST WHERE REQD_IND IS NOT NULL AND CUST_FORENAMES = '" + context.expand('${#Project#Forename}')+ "'AND CUST_SURNAME = '" + context.expand('${#Project#Surname}'));
当我在没有sql.firstRow
函数的情况下运行语句时,它返回日志中的整个select语句,但能够访问自定义属性,但是它是我之后的结果,即true / false
答案 0 :(得分:2)
ORA-01756:引用字符串未正确终止是因为'
中的最后一个SELECT
丢失了。
为避免错误并保持SELECT
清除,我建议改为使用firstRow(String sql,List<Object> params)
方法:
def indicator = sql.firstRow(
'''SELECT COUNT(*)
FROM REQUEST
WHERE REQD_IND IS NOT NULL
AND CUST_FORENAMES = ?
AND CUST_SURNAME = ?''',
[context.expand('${#Project#Forename}'),context.expand('${#Project#Surname}')])
此外,如果您只想获取行数,请使用COUNT(*)
的别名,并从firstRow
方法返回的结果中取回:
def indicator = sql.firstRow(
'''SELECT COUNT(*) as count
FROM REQUEST
WHERE REQD_IND IS NOT NULL
AND CUST_FORENAMES = ?
AND CUST_SURNAME = ?''',
[context.expand('${#Project#Forename}'),context.expand('${#Project#Surname}')])
// use the alias to get simply the number
def count = indicator.count
答案 1 :(得分:0)
你能试试吗
def forename = context.expand('${#Project#Forename}')
def surname = context.expand('${#Project#Surname}')
def indicator = sql.firstRow("SELECT COUNT(*) FROM REQUEST WHERE REQD_IND IS NOT NULL AND CUST_FORENAMES = $forename AND CUST_SURNAME = $surname");