过去三天,我在从VB Script调用DB2存储过程时遇到了麻烦。我可以调用简单但不具有更多IN / OUT参数的SP。
我使用以下代码为SP添加参数。
oADO_CMD.CommandType = 4
oADO_CMD.CommandText = "schema.sp_name"
oADO_CMD.Parameters.Refresh
Const adVarChar = 200
Const adParamInput = 1
Const adParamOutput = 2
oADO_CMD.Parameters.append oADO_CMD.CreateParameter("test", adVarChar, adParamInput, 4, "1000")
oADO_CMD.Parameters.append oADO_CMD.CreateParameter("tester", adVarChar, adParamInput, 6, "")
当我在前端运行时,我使用下面的查询,它工作正常。
call schema.sp_name('1000','')
在一个SP中一切正常但是当我对另一个SP使用相同的方法时,它只会引发我的错误。但是在前端,当我提供相同的数据时,我可以收到记录。
当我查看关于错误的SP时,它与准备游标有关。说真的,我不确定它是什么,因为我在SP中不是很好。这是关于将值从vbs传递到DB2 SP的吗?因为有些参数我需要在双引号中传递空值..或者其他导致错误的东西......?
以下是SP的一些内容。
CreateSQL.
------------,
MOVE SPACES TO lc_SQLStatement.
EXEC SQL
SET :lc_SQLStatement = TRIM(:lc_SelectClause) || " " ||
TRIM(:lc_FromClause) || " " ||
TRIM(:lc_WhereClause)
END-EXEC.
STRING lc_SelectClause DELIMITED BY SIZE
MOVE SPACES TO lc_SQLStatement.
EXEC SQL
SET :lc_SQLStatement = TRIM(:lc_SelectClause) || " " ||
TRIM(:lc_FromClause) || " " ||
TRIM(:lc_WhereClause)
END-EXEC.
STRING lc_SelectClause DELIMITED BY SIZE
lc_FromClause DELIMITED BY SIZE
lc_WhereClause DELIMITED BY SIZE
INTO lc_SQLStatement
END-STRING.
CreateDynamCursor.
-------------------
EXEC SQL
PREPARE cu_SearchCR FROM :lc_SQLStatement
END-EXEC.
EVALUATE SQLCODE
WHEN 0
CONTINUE
WHEN OTHER
MOVE lnc_04 TO pc_ReturnCode
MOVE lnc_PrepCurErr TO pc_RetCodeDescription
END-EVALUATE.
我的pc_ReturnCode和pc_RetCodeDescription值为“04”,“准备cu_SearchCR时出错”。