MySQLのストアド・プロシージャと関数


1.ストアド・プロシージャと関数
ストレージ・プロシージャと関数は、事前にコンパイルされてデータベースに格納されているSQL文の集合であり、ストレージ・プロシージャと関数を呼び出すことで、アプリケーション開発者の多くの作業を簡素化し、データベースとアプリケーション・サーバ間のデータの転送を低減し、データ処理の効率を向上させることができます.関数:戻り値が必要です.パラメータはINタイプのストレージ関数のみです.戻り値がありません.パラメータはIN,OUT,INOUTタイプを使用できます.他のタイプのデータベースからMySQLに移行する関数がある場合は、関数をストレージ・プロシージャに変更する必要があります.
2.ストアド・プロシージャと関数の関連操作
  • 作成、修正
  • create procedure sp_name([proc_parameter[,...]])
    [characteristic ...] routine_body
    
    create function sp_name([func_parameter[,...]])
    returns type
    [characteristic ...]routine_body
    proc_parameter:
    [IN\OUT\INOUT] param_name type
    
    func_parameter:
    param_name type
    
    type: 
        any valid mysql data type
    characteristic:
        language sql
        |[not] deterministic
        |{contains sql| not sql |reads sql data|modifies sql data}
        |sql security{definer|invoker}
        |comment 'string'
    routine_body:
        valid sql procedure statement or statements
    alter {procedure|function} sp_name[characteristic ...]
    
    characteristic:
    {contains sql|no sql | reads sql data| modifies sql data}
    |sql security {definer|invoker}
    |comment 'string'
    //    
    call sp_name([parameter[,...]])

    MySQLのストアド・プロシージャおよび関数には、DDL文を含めることができ、ストアド・プロシージャでコミット(Commit、確認前の変更)またはロールバック(Rollback、つまり放棄前の変更)を実行することもできますが、ストアド・プロシージャおよび関数ではload data infile文を実行することはできません.また、ストアド・プロシージャおよび関数では、他のプロシージャまたは関数を呼び出すことができます.
    //       
    delimiter $$ //      ”$$“
    create procedure film_in_stock( IN p_film_id int,IN p_store_id int,out p_film_count int)
    reads sql data
    begin
        select inventory_id
        from inventory
        where film_id = p_film_id
        and store_id = p_store_id
        and inventory_in_stock(inventory_id);
    select found_rows() into p_film_count;
    end $$
    
    Query OK,0 rows affected(0.00sec)
    
    delimiter ;//       ”;“