sql >> データベース >  >> RDS >> Mysql

MySQLWorkbenchを使用したスト​​アドプロシージャ

    組み込みのプロシージャエディタを使用する場合、MySQLWorkbenchはいくつかの追加コマンドを追加します。

    USE `test`; // <----------
    DROP procedure IF EXISTS `p2`;  // <----------
    
    DELIMITER $$
    USE `test`$$ // <----------
    CREATE PROCEDURE test.`p2` ()
    LANGUAGE SQL
    DETERMINISTIC
    COMMENT 'Adds "nson" to first and last names in the record.'
    BEGIN
    SELECT 'Hello World';
    END $$
    
    DELIMITER ; // <----------
    

    これらのコマンドは、ストアドプロシージャの構文に厳密に関連しているわけではなく、単なる商品です。他のMySQLクライアント(HeidiSQLや公式のコマンドラインユーティリティなど)はそれらを追加しません。最後の区切り文字の変更は、同じ接続での将来のステートメントの問題を回避するためのリセットである可能性があります。

    プロシージャコードの開始位置と終了位置をクライアントに指示するには、区切り文字を変更する必要があります。問題は、プロシージャ本体は通常SQLステートメントのコレクションであるため、区切り文字の変更を省略すると、MySQLは一連のステートメントを実行しようとしていると見なします。最初のステートメントは次のようになります。

    CREATE PROCEDURE test.`p2` ()
    LANGUAGE SQL
    DETERMINISTIC
    COMMENT 'Adds "nson" to first and last names in the record.'
    BEGIN
    SELECT 'Hello World';
    

    DELIMITER $$を使用 あなたはMySQLにあなたの完全なステートメントがCREATEから来ることを伝えています ENDへ 。単なる構文糖衣です:DELIMITER SQLキーワードでもありません。たとえば、HeidiSQLは、プロシージャ本体を記述するテキストボックスを備えたGUIを提供するため、DELIMITERの回避策は必要ありません。




    1. インデックスの列の順序はどのくらい重要ですか?

    2. Laravelの移行(errno:150外部キー制約が正しく形成されていません)

    3. MySQLマッチの問題

    4. Yii2のジャンクションテーブルからデータを取得します