0
私はIN
句で複数のproject_idsを取り込むSQLクエリを実行しようとしています。この問合せは、Oracle SQL Developerで直接実行すると正常に動作しますが、Groovyクラスでは機能しません。私はprojectListgroovy sql.rowsで文字列のリストをバインドパラメータとして使用する方法は?
DB connection ready
[[PROJECT_NO:x-xxxx, PROJECT_NAME:Xonions, Inc.]]
は、上記の問題から2つの質問です私のコード
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
[]
結果である
groovy
sql.rows
クエリで文字列のリストをパラメータとしてバインドする方法はありますか?sql.rows
によって実行される最終クエリをパラメータで確認する方法はありますか?
@NathanHughes ...あなたが声明とプロジェクト番号の数ではなく、スタートとしてベースのバインドのコレクションに作成する一般的な方法が必要だと思う:それは動的ですリストには、これを行うための他の方法がありますか? – Ricky