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

MySQLは区切り文字を使用してストアドプロシージャの構文を作成します

    MySQLでのストアドプロシージャ構文の使用を開始する(ターミナルを使用):

    1。ターミナルを開き、次のようにmysqlにログインします。

    [email protected]:~$ mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    mysql> 
    

    2。手順があるかどうかを確認してください:

    mysql> show procedure status;
    +-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    | Db        | Name          | Type      | Definer | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
    +-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    |   yourdb  | sp_user_login | PROCEDURE | [email protected]%  | 2013-12-06 14:10:25 | 2013-12-06 14:10:25 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
    +-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    1 row in set (0.01 sec)
    

    私は1つ定義しましたが、おそらく最初から何もありません。

    3。データベースに変更し、削除します。

    mysql> use yourdb;
    Database changed
    
    mysql> drop procedure if exists sp_user_login;
    Query OK, 0 rows affected (0.01 sec)
        
    mysql> show procedure status;
    Empty set (0.00 sec)
        
    

    4。さて、これでストアドプロシージャが定義されていません。最も単純なものを作成します:

    mysql> delimiter //
    mysql> create procedure foobar()
        -> begin select 'hello'; end//
    Query OK, 0 rows affected (0.00 sec)
    

    //ストアドプロシージャのコマンドの入力が完了すると、端末と通信します。ストアドプロシージャの名前はfoobarです。パラメータを必要とせず、「hello」を返す必要があります。

    5。そこにあるかどうかを確認し、区切り文字を元に戻すことを忘れないでください!:

     mysql> show procedure status;
     -> 
     -> 
    

    ガッチャ!なぜこれが機能しなかったのですか?区切り文字を//に設定します 覚えて? ;に戻します

    6。区切り文字を元に戻し、手順を確認します。

    mysql> delimiter ;
    mysql> show procedure status;
    +-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    | Db        | Name   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
    +-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    | yourdb    | foobar | PROCEDURE | [email protected] | 2013-12-06 14:27:23 | 2013-12-06 14:27:23 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
    +-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    1 row in set (0.00 sec)
    
       
    

    7。実行する:

    mysql> call foobar();
    +-------+
    | hello |
    +-------+
    | hello |
    +-------+
    1 row in set (0.00 sec)
    Query OK, 0 rows affected (0.00 sec)
    

    Hello worldcomplete、それをより良いもので上書きしましょう。

    8。 foob​​arを削除し、パラメーターを受け入れるように再定義して、再実行します。

    mysql> drop procedure foobar;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show procedure status;
    Empty set (0.00 sec)
    
    mysql> delimiter //
    mysql> create procedure foobar (in var1 int)
        -> begin select var1 + 2 as result;
        -> end//
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter ;
    mysql> call foobar(5);
    +--------+
    | result |
    +--------+
    |      7 |
    +--------+
    1 row in set (0.00 sec)
    Query OK, 0 rows affected (0.00 sec)
    

    良い!入力を受け取り、それを変更し、出力するプロシージャを作成しました。では、out変数を実行しましょう。

    9。 foob​​arを削除し、出力変数を作成して実行します:

    mysql> delimiter ;
    mysql> drop procedure foobar;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter //
    mysql> create procedure foobar(out var1 varchar(100))
        -> begin set var1="kowalski, what's the status of the nuclear reactor?";
        -> end//
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> delimiter ;
    mysql> call foobar(@kowalski_status);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select @kowalski_status;
    +-----------------------------------------------------+
    | @kowalski_status                                    |
    +-----------------------------------------------------+
    | kowalski, what's the status of the nuclear reactor? |
    +-----------------------------------------------------+
    1 row in set (0.00 sec)
    

    10。 MySQLでのINOUTの使用例:

    mysql> select 'ricksays' into @msg;
    Query OK, 1 row affected (0.00 sec)
    
    
    mysql> delimiter //
    mysql> create procedure foobar (inout msg varchar(100))
    -> begin
    -> set msg = concat(@msg, " never gonna let you down");
    -> end//
    
    
    mysql> delimiter ;
    
    
    mysql> call foobar(@msg);
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> select @msg;
    +-----------------------------------+
    | @msg                              |
    +-----------------------------------+
    | ricksays never gonna let you down |
    +-----------------------------------+
    1 row in set (0.00 sec)
    

    うまくいきました、それは一緒に文字列を結合しました。したがって、変数msgを定義し、その変数をfoobarと呼ばれるストアドプロシージャに渡し、@msgはfoobarによって書き込まれました。

    これで、区切り文字を使用してストアドプロシージャを作成する方法がわかりました。ここでこのチュートリアルを続け、ストアドプロシージャ内の変数から始めます。 http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/



    1. SQLServerデータベースにID列を一覧表示するときにテーブルとスキーマを含める

    2. SQLiteクエリ結果で文字列を一重引用符で囲みます

    3. OracleSqlDeveloperの文字列リテラルが長すぎるエラー

    4. Railsの移行:PostgreSQL上のBigintが失敗しているようですか?