2016-11-16 6 views
2

mariadb手続きphpmyadminのエラーのphpMyAdminのSQLボックスにストアドプロシージャを作成中に次のエラーを取得

1064 - あなたはあなたのSQL構文でエラーが発生しています。 は 近くを使用する権利構文については、ご使用のMariaDBサーバのバージョンに対応していること取扱説明書を確認してください「)DECLAREのref_idのVARCHAR(10)はBEGIN」行1

CREATE PROCEDURE get_tree(IN id varchar) 
BEGIN 
DECLARE ref_id varchar(10); 
DECLARE userid varchar(10); 
SET userid = id; 
SET ref_id=''; 
SELECT ref_id into ref_id 
FROM user WHERE user_id=id ; 
create TEMPORARY table IF NOT EXISTS temp_table as (select * from user where 1=''); 
truncate table temp_table; 
WHILE ref_id <> '' DO 
    insert into temp_table select * from user WHERE user_id=userid; 
    SET userid = ref_id; 
    SET ref_id=''; 
    SELECT ref_id into ref_id 
    FROM user WHERE user_id=userid; 
END WHILE; 
select * from temp_table; 
END 

答えて

3

問題:

DELIMITER $$ 
CREATE PROCEDURE get_tree(IN id varchar(10)) 
BEGIN 
DECLARE ref_id varchar(10); 
DECLARE userid varchar(10); 
SET userid = id; 
SET ref_id=''; 
SELECT ref_id into ref_id 
FROM user WHERE user_id=id ; 
create TEMPORARY table IF NOT EXISTS temp_table as (select * from user where 1=''); 
truncate table temp_table; 
WHILE ref_id <> '' DO 
    insert into temp_table select * from user WHERE user_id=userid; 
    SET userid = ref_id; 
    SET ref_id=''; 
    SELECT ref_id into ref_id 
    FROM user WHERE user_id=userid; 
END WHILE; 
select * from temp_table; 


END$$ 
DELIMITER ; 
+0

ノートはちょうど混乱から未来の読者を防止します。区切り文字を変更することは、その問題に記述されている_initial_問題を解決したり、影響を与えることさえありません。それがあってもなくても、1行目と同じ正確なエラーが表示されます。この答えで間違ったパラメータを実際に修正した後でなければ、区切り文字は重要ではなくなります-semicolonを使用すると、当然構文エラーが発生しますが、3行目に最初のセミコロンが現れるまったく異なるものです。 – elenst

4

での問題は、プロシージャパラメータです - 長さなしでvarcharを持つことはできません。

CREATE PROCEDURE get_tree(IN id varchar(10)) 
BEGIN 
... 

(またはそこに欲しい長さがありますが、10は妥当な選択肢です)。次の区切り文字を追加することで解決

関連する問題