0
CREATE DEFINER = `ninja_dba`@`` PROCEDURE `adb`.`MACD12`( x int)
LANGUAGE SQL
DETERMINISTIC
READS SQL DATA
SQL SECURITY DEFINER
COMMENT ''
BEGIN

MACD_12:BEGIN
DECLARE z FLOAT;  
DECLARE y FLOAT default 56.41;
DECLARE w float;

WHILE x < 10 do
INSERT  into `MACD`(
x,y,z,X12) select z,y,x,w;

SET  z= IFNULL ( (y + ((2/13) * (w - y))),Y) ;
SET y=z;
SET x =x+1;
SET w = (select close from`raw data`);

end while;

end MACD_12;

END

call macd12 (1);

指数移動平均を構築しようとしています。問題の一部は最初の行を設定しているため、手順の開始時に最初の行 (56.41) を宣言します。プロシージャは機能すると思いますが、プロシージャを呼び出そうとすると、悪名高いエラー「サブクエリが複数の行を返します」エラー 1242 が表示されます。

どんな支援も大歓迎です。

4

2 に答える 2

0

私はあなたの問題があると思います

SET w = (select close from`raw data`);

1 行以上あるように見えraw dataますが、ここでエラーが発生する可能性があります。

条件 (WHERE句) を指定するか、LIMITステートメントを使用する必要があります。

于 2011-01-05T07:56:54.333 に答える
0

LIMIT 1 を末尾に置くと、

SET w = (select close from`raw data`); 

エラーなく動作しますか?

于 2011-01-05T07:59:38.350 に答える