製品テーブルから 3 種類の最小価格と最大価格を取得する Coldfusion8/MySQL のストアド プロシージャを呼び出しています。
一時テーブルを 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 で使用するにはどうすればよいですか?