Db2 ColdFusion 2016和存储过程抛出无效字符错误
我正在CF 2016安装中尝试现有代码。。。我得到这个错误 “[Macromedia][DB2 JDBC驱动程序][DB2]非法符号=;有效符号为…” 标识的行是存储过程调用的参数,如下所示:Db2 ColdFusion 2016和存储过程抛出无效字符错误,db2,coldfusion-2016,Db2,Coldfusion 2016,我正在CF 2016安装中尝试现有代码。。。我得到这个错误 “[Macromedia][DB2 JDBC驱动程序][DB2]非法符号=;有效符号为…” 标识的行是存储过程调用的参数,如下所示: <cfstoredproc datasource="#application.dsn#" procedure="LIVE.STOPS"> <cfprocparam type="In" cfsqltype="CF_SQL_BIGINT" dbvarname="STOPID" val
<cfstoredproc datasource="#application.dsn#" procedure="LIVE.STOPS">
<cfprocparam type="In" cfsqltype="CF_SQL_BIGINT" dbvarname="STOPID" value="#val( variables.procstopid )#" null="no">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" dbvarname="TRIPID" value="#val( url.tripId )#" null="no">
</cfstoredproc>
您可以发布存储的过程代码吗?删除dbvarname=“”属性-恢复到此属性的重新引入-并依赖顺序参数定位修复错误,但这是一个难题。我怀疑DB2在MSSQL中不需要像“@”或在Oracle中不需要像“:”这样的前缀是个问题,但我没有办法证实。另外-通过cfquery调用存储过程也可以,没有错误。遗憾的是,几个月前我们刚刚将dbvarname=添加回SPs(不熟悉DB2),它是否支持任何类型的日志记录来查看生成的sql语句?这可能会提供一些线索。
CREATE OR REPLACE PROCEDURE LIVE.STOP(
IN stopId BIGINT DEFAULT 0,
IN tripId INTEGER DEFAULT 0
) LANGUAGE SQL
BEGIN
DECLARE updateTripId INTEGER DEFAULT 0;
DECLARE minStopId BIGINT DEFAULT 0;
DECLARE maxStopId BIGINT DEFAULT 0;
DECLARE TripSearch_cursor CURSOR FOR
SELECT s1.fkTripsId
FROM live.paymentsTripsStops s1
JOIN live.Trips t ON s1.fkTripsId = t.Id
WHERE s1.fkStopsId = stopId
FETCH FIRST 1 ROWS ONLY;
DECLARE minMaxStop_cursor CURSOR FOR
SELECT
COALESCE(
(
SELECT s.Id
FROM live.Stops s
JOIN live.Trips t ON s.fkTripsId = t.Id
ORDER BY s.Sequence
FETCH FIRST 1 ROWS ONLY
),
0
) AS firstStopId,
COALESCE(
(
SELECT s.Id
FROM live.Stops s
JOIN live.Trips t ON s.fkTripsId = t.Id
ORDER BY s.Sequence DESC
FETCH FIRST 1 ROWS ONLY
),
0
) AS lastStopId
FROM live.Trips t
WHERE t.Id = updateTripId
FETCH FIRST 1 ROWS ONLY;
IF TripId > 0
THEN SET updateTripId = TripId;
ELSE OPEN TripSearch_cursor;
FETCH FROM TripSearch_cursor INTO updateTripId;
CLOSE TripSearch_cursor;
END IF;
IF updateTripId > 0
THEN OPEN minMaxStop_cursor;
FETCH FROM minMaxStop_cursor INTO minStopId, maxStopId;
CLOSE minMaxStop_cursor;
UPDATE live.Trips
SET fkFirstStopId = minStopId,
fkLastStopId = maxStopId
WHERE intId = updateTripId;
END IF;
END