2

私はいくつかの新しい MySQL 構文のロープを学ぼうとしていますが、問題があります。これは単純なはずです...

ここのマニュアルに従っています: http://dev.mysql.com/doc/refman/5.5/en/case.html

しかし、構文エラーが発生し続けます。これが私のルーチンです:

# Drop anonymous accounts, if any
USE mysql;
CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 
 WHEN 1 THEN
  DROP USER ''@'localhost';
  FLUSH PRIVILEGES; 
END CASE;

エラーは次のとおりです。

エラー 1064 (42000): SQL 構文にエラーがあります。near 'CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

前もって感謝します。

4

1 に答える 1

2

修正されたステートメントに関するコメントを確認しましたが、すぐに2番目の問題が発生しましたが、ストアドプロシージャまたは関数内でこれを使用していないことが明らかになりました。のドキュメントにflow control statementsは、ストアドプロシージャ/関数内にある必要があると非常に微妙に記載されています。

コードを更新してプロシージャ内に配置し、プロシージャを呼び出して実行します。

USE mysql;

DROP PROCEDURE p;
DELIMITER |
CREATE PROCEDURE p() BEGIN
    CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 
        WHEN 1 THEN
            DROP USER ''@'localhost';
            FLUSH PRIVILEGES;
        ELSE
            SELECT 'no users found!';
    END CASE;
END;
|

CALL p();

また、キャッチオールELSEブロックを追加したことにも注意してください。値がわからない場合はCASE、「ケースが見つかりません」という警告がスローされます。これは望ましい場合と望ましくない場合があります。

于 2012-08-26T19:48:04.867 に答える