1

あまりにも長い間これと戦ってきたので、助けを求めるためにここに来ました...

次のことを行いたいMySQLストアドプロシージャがあります。

特定のレコードの「id」と「username」を指定

  1. id がテーブルに存在しない場合は、レコードを作成します
  2. それ以外の場合、ID が存在し、ユーザー名が存在するものと同じでない場合は、レコードを更新します
  3. 他に何もしない

私は次のことを試しました:

BEGIN

DECLARE doCreate INT;
DECLARE doUpdate INT;
SELECT COUNT(*) INTO doCreate FROM app_user WHERE id=1;
IF (doCreate > 0) THEN 
   SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
END IF

IF(doCreate = 0) THEN ---SYNTAX ERROR ON THIS LINE---
   SELECT 'CREATE';
ELSE IF(doUpdate = 0) THEN
   SELECT 'UPDATE';
ELSE
   SELECT 'NOTHING';
END IF

END

if-elseif-else ブロックを case ステートメントに置き換えてみましたが、同じ結果が得られました...

CASE ---ERROR ON THIS LINE---
   WHEN doCreate = 0 THEN 
      SELECT 'CREATE';
   WHEN doUpdate = 0 THEN
      SELECT 'UPDATE';
   ELSE
      SELECT 'NOTHING';
END
  • 最初の END IF の後に来ると構文エラーが発生するように見えるので、それが最初に発生する問題です...

何か助けていただければ幸いです - これを行うためのより良い方法があると確信しています。

4

1 に答える 1

2

END IFs をで終了する必要があると思います。;内部的ELSEIFには 1 つの単語にする必要があります。それ以外の場合は、別のEND IFものが必要ですが、見つかりません。

IF (doCreate > 0) THEN 
   SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
END IF; /* terminate with ; */

IF(doCreate = 0) THEN 
   SELECT 'CREATE';
ELSEIF(doUpdate = 0) THEN
   SELECT 'UPDATE';
ELSE
   SELECT 'NOTHING';
END IF; /* terminate with ; */

さまざまな使用例については、MySQLIF/ELSE構文リファレンスを参照してください。

于 2012-07-28T19:17:23.897 に答える