我在Coldfusion8/MySQL中调用存储过程,从产品表中获取3种最小和最大价格。如何将对象(从MySQL临时表中)返回到Coldfusion存储过程?
我在返回临时表背到MySQL的问题。以下代码仅返回第一个foundMin值,而不是临时表本身。
如果我跑这里面的MySQL结果
foundmin 1st price > returned to Coldfusion
foundmax 1st price
foundmin 2nd price
foundmax 2nd price
foundmin 3rd price
foundmax 3rd price
temporary table
所以我返回所有单个表条目加表,当我只想表。
这里是我的代码:
BEGIN
DECLARE filterILN vARCHAR(100);
DECLARE localILN vARCHAR(100);
DECLARE orderILN vARCHAR(55);
#search strings
DECLARE p_e vARCHAR(55) DEFAULT 'art.preis_ek';
DECLARE p_a vARCHAR(55) DEFAULT 'art.preis_aktuell';
DECLARE p_r vARCHAR(55) DEFAULT 'art.rabatt';
DECLARE strLen INT DEFAULT 4;
DECLARE strCount INT DEFAULT 1;
DECLARE searchFor vARCHAR(55);
DECLARE foundMin DECIMAL(12,2);
DECLARE foundMax DECIMAL(12,2);
# temp table
DROP TEMPORARY TABLE IF EXISTS MinMax;
CREATE TEMPORARY TABLE MinMax (
price vARCHAR(50) DEFAULT ''
, minVal DECIMAL(12,2) DEFAULT 0.00
, maxVal DECIMAL(12,2) DEFAULT 0.00
) ENGINE=MEMORY;
# FILTER 1
IF param_reference_iln = 'A' THEN SET filterILN = 'B'
ELSEIF param_reference_iln = 'C' THEN SET filterILN = 'D'
END IF;
# FILTER 2
IF param_filter IS NOT NULL AND param_filter != ""
THEN SET localILN = CONCAT('AND (iln = "', param_filter, '")');
ELSE SET localILN = '*';
END IF;
# FILTER 3
IF param_preorder = 'ja'
THEN SET orderILN = CONCAT('AND vororder = "',param_preorder, '"');
ELSE SET orderILN = '*';
END IF;
#loop over strIDs
getPrice:
LOOP
IF ELT(strCount, p_e, p_a, p_r) = 'art.rabatt'
THEN SET searchFor = 'art.preis_ek - art.preis_aktuell)/art.preis_ek';
ELSE SET searchFor = ELT(strCount, p_e, p_a, p_r);
END IF;
#min
SELECT MIN(searchFor) AS foundMin
FROM artikelstammdaten AS art
WHERE art.aktiv = "ja"
AND art.bestand != "0"
AND filterILN
AND art.modus = CONCAT('OPEN ', param_unlocked_iln)
AND localILN
AND orderILN
LIMIT 1;
#max
SELECT MAX(searchFor) AS foundMax
FROM artikelstammdaten AS art
WHERE art.aktiv = "ja"
AND art.bestand != "0"
AND filterILN
AND art.modus = CONCAT('OPEN ', param_unlocked_iln)
AND localILN
AND orderILN
LIMIT 1;
# insert into temp table
INSERT INTO MinMax (price, minVal, maxVal)
VALUES(ELT(strCount, p_e, p_a, p_r), foundMin, foundMax);
# increate counter by 1, end if strLen reached
SET strCount = strCount+1;
IF strCount = strLen
THEN LEAVE getPrice;
END IF;
END LOOP getPrice;
#output table
SELECT * FROM MinMax;
#destroy
DROP TABLE MinMax;
END
的值计算在临时表中,他们应该是正确的,并插入。唯一的问题是上述返回表条目和表。
问题:
我怎么只返回临时表作为一个结果/结构,我可以再与ColdFusion的工作吗?
看起来不错。谢谢。也指着我朝这个方向发展。我将在明天编辑结构体。 – frequent
另外,您是否按照预期验证了“where”子句的实际工作情况?因为我不认为你可以使用变量来改变SQL。在大多数数据库中,它需要动态sql。 – Leigh
hm。今天想要测试。它更好地工作,因为我有大量的通过创建像这样的参数来生活的cfqueries,并且我想要移入mysql。例如filterIln变量来自cf中的一个循环,它创建了一个有效的用户标识符字符串,如“iln = 123或iln = 456或iln = 789 ...”,我从另一个通用存储过程中提取并添加到此处。我想我可以在这里运行这个,但我做了filterIln一个util-variable-storedproc,导致它在我继承的应用程序中使用 – frequent