如何在select query

时间:2018-04-02 12:28:15

标签: javascript sql oracle bpm

在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

2 个答案:

答案 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