2010-11-27 10 views
1

私はSQL Anyframeのif elseステートメントを使用してmySql dbに対して単純なストアドプロシージャを作成しようとしています。これはなぜ簡単ではないでしょうか?ELSEステートメントがmySqlで動作する場合

CREATE PROCEDURE p(IN Number INT) 

IF NUMBER = 1 THEN 
SELECT * FROM tblProduct WHERE ProductID = Number 
ELSE SELECT * FROM tblProduct WHERE ProductId = 2 
END IF 

が動作しない理由を誰もがこれで私を助けると言うことができる場合、私は感謝し、私はそれは単純なものです望んでいるので、私は、MySQLの構文で過度に慣れていないんだけど、私はただ見ることができません私は間違っています。 読んでいただきありがとうございます。

私が実行しようとすると、私は、次を得る:

エラーコード:1064 あなたのSQL構文でエラーが発生しています。ライン5

答えて

3

MySQLの文はセミコロンで区切られています。彼らと手順を作成するには、ちょっとしたトリックとても好きです:

DELIMITER // 

CREATE PROCEDURE p(IN Number INT) 
BEGIN 
    IF NUMBER = 1 THEN 
     SELECT * FROM tblProduct WHERE ProductID = Number; 
    ELSE 
     SELECT * FROM tblProduct WHERE ProductId = 2; 
    END IF; 
END // 

DELIMITER ; 

チェックアウトの場合/他のためのより多くの情報のためdocumentation

+0

グレート、この作品を。あなたの簡単な答えもありがとう。 – Chris

0

であなたが必要とするのならtblProduct intProductId = 2 END SELECT * FROM ELSE '付近に使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。あなたのselectステートメントの後に。また、プロシージャ本体の周りにBEGINとENDが必要です。プロシージャの正確な構文については、多くの例についてはthe manualを参照してください。

0

ストアドプロシージャでは常にIF ELSEステートメントが使用され、単純なselectクエリではトリガされないことに注意してください。そして、ELSEまたはキーワードIF常にではない

正しい構文以下query.Likeの前に新しい行で書く:

DELIMITER // 

CREATE PROCEDURE NAME(IN Number INT) 
BEGIN 
    IF roll= 1 THEN 
     SELECT * FROM table1 WHERE id = roll; 
    ELSE 
     SELECT * FROM table2 WHERE id = 2; 
    END IF; 
END // 

DELIMITER ; 

間違った構文:

DELIMITER // 

CREATE PROCEDURE NAME(IN Number INT) 
BEGIN 
    IF roll= 1 THEN SELECT * FROM table1 WHERE id = roll; 
    ELSE SELECT * FROM table2 WHERE id = 2; 
    END IF; 
END // 

DELIMITER ;