在SQL Select查询中添加字符串变量。 “tw.local.subBarCode”是一个字符串变量和“tw.local.caseID”它也是字符串变量。
示例:在变量中有一些值
CASE_ID = 15232和SUBBARCODE = ODDV-1803-015232-HL01。
tw.local.sql="select CS.ORIGINALCHECK_ID AS checkId, "+
"CS.CHECKTYPE_ID AS checkTypeId, "+
"CS.CHECKTYPE_ID AS componentID, "+
"CT.NAME AS componentName "+
"from CHECK_SUMMARY CS INNER JOIN CHECKTYPE CT "+
"ON CT.ID=CS.CHECKTYPE_ID "+
"where CS.ORIGINALCHECK_ID="+tw.local.subBarCode+" and CS.CASE_ID="+tw.local.caseID+"";
下面这样我调试的时候就是在我的选择查询中输入变量。
select CS.ORIGINALCHECK_ID AS checkId,
CS.CHECKTYPE_ID AS checkTypeId,
CS.CHECKTYPE_ID AS componentID,
CT.NAME AS componentName from
CHECK_SUMMARY CS INNER JOIN CHECKTYPE CT
ON CT.ID=CS.CHECKTYPE_ID
where CS.ORIGINALCHECK_ID='ODDV-1803-015232-HL01''
and CS.CASE_ID=15232
请有人帮我解决这个问题。
我调试时需要如下所示的查询。
select CS.ORIGINALCHECK_ID AS checkId,
CS.CHECKTYPE_ID AS checkTypeId,
CS.CHECKTYPE_ID AS componentID,
CT.NAME AS componentName from
CHECK_SUMMARY CS INNER JOIN CHECKTYPE CT
ON CT.ID=CS.CHECKTYPE_ID
where CS.ORIGINALCHECK_ID='ODDV-1803-015232-HL01'
and CS.CASE_ID=15232
答案 0 :(得分:1)
根据您的代码段以及标记为“BPM”的事实,您似乎在询问有关在产品IBM BPM中执行SQL的问题。虽然您没有调出产品的版本,但我认为它是7.5或更高版本。
假设所有这些都是正确的,您应该使用System Data Toolkit中的服务“SQL Execute Statement”执行查询。您正在尝试创建完整的SQL语句,而不是利用参数化查询功能(这将执行@The Impaler建议的操作)
您需要修改SQL以便它可以使用参数化选项。代码应该是 -
tw.local.sql="select CS.ORIGINALCHECK_ID AS checkId, "+
"CS.CHECKTYPE_ID AS checkTypeId, "+
"CS.CHECKTYPE_ID AS componentID, "+
"CT.NAME AS componentName "+
"from CHECK_SUMMARY CS INNER JOIN CHECKTYPE CT "+
"ON CT.ID=CS.CHECKTYPE_ID "+
"where CS.ORIGINALCHECK_ID=? and CS.CASE_ID=?";
然后,您可以使用以下内容设置参数值 -
tw.local.parameters = new tw.object.listOf.SQLParameter();
tw.local.parameters[0] = new tw.object.SQLParameter();
tw.local.parameters[0].value = tw.local.subBarCode;
tw.local.parameters[0].type = 'VARCHAR'; //Note: Guessing here.
tw.local.parameters[1] = new tw.object.SQLParameter();
tw.local.parameters[1].value = tw.local.caseID;
tw.local.parameters[1].type = 'INTEGER';
然后,您将这两者都交给SQL Execute Statement服务,一切都应该正常工作。您受到SQL注入的保护,如果您的某个变量在字符串中声明了',则不会神奇地破坏。
有时您可以在不指定类型的情况下离开,具体取决于底层JDBC驱动程序的默认行为。 SQLParameter业务对象记录了该类型的可能输入。
答案 1 :(得分:0)
您是否尝试解码参数中的任何内容?
请看一下这篇文章:HTML Entity Decode