2012-01-07 23 views
0

私は、次の列を持つテーブルaを有する:
ID
name
はA_IDが別a行のIDであるMySQLのルーチンは、変数に値を代入しませんか?

をA_ID。

私は、次の値を持つ3行があるとします。
1、 'NAME1'、
2ヌル、 '名前2'、1
3、 'NAME3'、2

[OK]を、今私を "name3 | name2 | name1" または一般にname他の参照がなくなるまで別の行を参照する各行の値(文字で区切られます)を返すストアドプロシージャを作成する場合は、 。

次のコードに問題がありますか? SELECT @names

 
DELIMITER $$ 

CREATE PROCEDURE chain (IN init_name VARCHAR(100), OUT names VARCHAR(1000)) 
BEGIN 
    DECLARE next_id INT default 0; 
    DECLARE curr_id INT default 0; /* Just in case */ 
    DECLARE n VARCHAR(100) default ""; 

    SET n = init_name; 

    SELECT a_id 
    INTO next_id 
    FROM a 
    WHERE `name`=n; 


    SET names = n; 
    WHILE next_id <> NULL DO 
     SET curr_id=next_id; /* Again, just in case */ 

     SELECT `name`, a_id 
     INTO n, next_id 
     FROM a 
     WHERE id=curr_id; 

     SET names = CONCAT(names, "|", n); 
    END WHILE; 
END$$ 

CALLチェーン( 'NAME3'、@namesは)単に "NAME3" あなたはあなたのプロシージャを呼び出した後@namesを読む必要が

+0

(右SET names ....後)SPのボディにSELECT namesを行います。 申し訳ありませんがみんな、初心者のミス。 、あなたがNEXT_IDをテストしなければならない代わりにNEXT_ID <> NULLのためのテストの はい – ieeehh

答えて

0

を出力します。あなたはそれを出力する手続きをしたい場合や、私はちょうどそれを考え出した

+0

nullではありません。私はそれを選択すると、@namesの値は、単に「NAME3」です。 – ieeehh

+0

@ieeehh:申し訳ありませんが、私はあなたの質問を慎重に読んでいない、私はあなたがSPからの価値を返すのに問題があると思った...それはあなたがすでに原因を考え出したようだ。 – a1ex07

関連する問題