我在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