0
我试图执行一个SQL查询与IN
子句,它需要多个project_ids。当我直接在Oracle SQL Developer中运行它时,此查询工作正常,但不能从常规类中运行。如何使用字符串列表作为groovy sql.rows中的绑定参数?
下面是我的代码
class Test {
private static final String PROJECT_INFO_FOR_USER ="select PROJECT_ID as PROJECT_NO, NAME as PROJECT_NAME from PROJECT_DIM where PROJECT_ID IN (?)"
private def getProjectList(def caseResult) {
def projectList = ""
caseResult.each { projno ->
if (projectList.length() == 0) {
projectList = "'${projno.project_no}',"
} else {
if (projectList.indexOf(projno.project_no) == -1)
projectList+="'${projno.project_no}',"
}
}
projectList = projectList.substring(0, projectList.length() - 1)
return projectList
}
private process() {
def db = [url: "jdbc:oracle:thin:@x.xx.xx.xx:1521:ORCL",
user: 'xxxx', password: 'xxxx', driver: 'oracle.jdbc.pool.OracleDataSource']
def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
println "DB connection ready"
def caseResult = [['project_no':'x-xxxx', 'case_nos':['12344'], 'updated_on':'1485335172'], ['project_no':'y-yyyy', 'case_nos':['56789'], 'updated_on':1490359241]]
def projectList = "x-xxxx"
def params = getProjectList(caseResult)
def result = sql.rows(PROJECT_INFO_FOR_USER, params).collect { // If I replace params with projectList then 'result' is assigned a row from oracle database
it as Map
}
println result
}
public static void main(String[] args) {
Test t = new Test()
t.process()
}
}
结果
DB connection ready
[]
结果当我projectList
取代PARAMSDB connection ready
[[PROJECT_NO:x-xxxx, PROJECT_NAME:Xonions, Inc.]]
以下是上述问题的2个问题
如何在groovy
sql.rows
查询中绑定一个字符串列表作为参数?有没有办法看到带有参数
sql.rows
执行的最终查询?
@NathanHughes:它是一个动态名单,有没有其他的方式来做到这一点? – Ricky