如何在 select 查询中分配字符串变量

how to assign the string variable in select query

ho 在 SQL Select 查询中添加字符串变量。 "tw.local.subBarCode" 是字符串变量,"tw.local.caseID" 也是字符串变量。

示例:在变量中有一些值

CASE_ID=15232 and 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 查询中获取变量。

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

您是否尝试过解码参数中的任何内容?

请看看这个post:HTML Entity Decode

根据您的代码片段和您已标记 "BPM" 的事实,看来您是在询问有关在产品 IBM BPM 中执行 SQL 的问题。虽然你不说出产品的版本,但我会假设它是 7.5 或更高版本。

假设所有这些都是正确的,您应该使用系统数据工具包中的服务 "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 执行语句服务,一切都应该正常工作。您不会受到 SQL 注入的保护,如果您的某个变量在字符串中说了 ',也不会神奇地中断。

有时您可以在不指定类型的情况下逃脱,这取决于底层 JDBC 驱动程序的默认行为。 SQL参数业务对象记录了该类型的可能输入。