マルチメーター_MySQLストアド・プロシージャ


1、ストレージプロセス
  • ストレージ・プロシージャとは
  • ストレージ・プロシージャは、特定の機能を完了するsql文のセットです.コンパイルによってデータベースに格納され、指定されたストレージ・プロシージャ名呼び出しによって実行される
  • .
  • ストアド・プロシージャ=sql文セット+制御文
  • ストレージ・プロシージャの使用の利点
  • ストアド・プロシージャ作成は、ストアド・プロシージャ文
  • を再記述することなく複数回呼び出すことができる.
  • 記憶プロセスは受信パラメータをサポートし、出力値
  • を返す.
  • ストレージプロセスプログラムの実行速度を速める
  • ストレージ・プロシージャは、sql文の機能と柔軟性を向上させる
  • ストレージ・プロシージャの作成
  • フォーマットは、以下の
  • である.
    #       
    delimiter // 
    create procedure       ([in|out|inout]   ,    )
    begin 
              
    end 
    //
    delimiter ;
    
    call       (  )    #       
  • delimiter:区切り記号、境界記号、ここで指定した区切り記号は//で、
  • をカスタマイズできます.
  • ストレージ・プロシージャの作成
  • create procedureストアド・プロシージャ名()
  • begin...endは、ストレージ・プロシージャの開始および終了
  • を表す.
  • ストレージ・プロシージャの削除
  • drop procedureストアド・プロシージャ名
  • drop procedure if existsストレージ・プロシージャ名#強化コードの堅牢性
  • ストレージ・プロシージャを呼び出す
  • callストアド・プロシージャ名()
  • inパラメータ値呼び出し時に
  • を指定する必要があります.
  • outパラメータは、呼び出し後に
  • に戻ることができる.
  • inoutパラメータ呼び出し時に指定され、
  • に戻ることができる.
    # in     ,b          
    delimiter //
    drop procedure if exists b;
    
    create procedure b(in n int)
    begin
        select n;
        set n = 2;
        select n;
    end
    //
    delimiter ;
    
    set @n = 1;
    call b(@n);        #        b
    
    +------+
    |   n  |
    +------+
    |   1  |
    +------+
    
    +------+
    |   n  |
    +------+
    |   2  |
    +------+
    # out     
    # out          ,        
    delimiter //
    drop procedure if exists b;
    
    create procedure b(out n int)
    begin
        select n;
        set n = 2;
        select n;
    end
    //
    delimiter ;
    
    set @n = 1;
    call b(@n);        #        b
    
    +-------+
    |   n   |
    +-------+
    |  NULL |    #    out          ,        ,         n   null
    +-------+  
     
    +-------+
    |   n   |
    +-------+
    |   2   |
    +-------+
    # inout     
    delimiter //
    drop procedure if exists b;
    
    create procedure b(inout n int)
    begin
        select n;
        set n = 2;
        select n;
    end
    //
    delimiter ;
    
    set @n = 1;
    call b(@n);        #        b
    
    +---------+
    |    n    |
    +---------+
    |    1    |
    +---------+
     
    +---------+
    |    n    |
    +---------+
    |    2    |
    +---------+

     
    2、実例
  • ストレージプロセスによりデータ作成
  • を実現する.
    #     t     t        
    delimiter //
    drop procedure if exists a;
    
    create procedure a(in n int)
    begin
    
        declare x int default 1;
        declare y int default 10;
        drop table if exists t;
        create table t(id int(3),age int(3));
    
    while n < 20 do
    
        insert into t values(x,y);
        set x = x + 1;
        set y = y + 10;
        set n = n + 1;
    
    end while;
    select * from t;
    end
    //
    delimiter ;
    
    call a(5)        #       
    delimiter //
    drop PROCEDURE if EXISTS i;
    CREATE PROCEDURE i(n int)
    BEGIN
    DECLARE x int DEFAULT 1;
    DECLARE y varchar(20) DEFAULT "";
    DECLARE z int DEFAULT 22;
    
    while n <=100 DO
        set y = CONCAT("zhangsan",x);
        INSERT into t VALUES(x,y,z);
        set x = x + 1;
        set n = n + 1;
    end WHILE;
    SELECT COUNT(*) from t;
    end
    //
    delimiter ;
    
    call i(1);
  • ストレージプロセスにより一括削除データ
  • を実現する.
    delimiter //
    drop procedure if exists b;
    
    create procedure b(in n int)
    begin
        declare x int default 1;
    
    while n < 10 do 
        delete from t where id = x;
        set n = n + 1;
        set x = x + 1;
    
    end while;
    select * from t;
    end
    //
    delimiter ;
    
    call b(0)        #       
  • は、記憶処理によりクエリーデータ
  • を実現する.
    delimiter //
    drop procedure if exists c;
    create procedure c(n int)
    
    BEGIN
    drop table if exists dcs;
    create table dcs(id int(1),name varchar(10),sex char(2));
    alter table dcs change id id int(1) primary key auto_increment;
    insert into dcs(name,sex)values('zhangsan1','m'),('lisi1','m');
    insert into dcs(name,sex)values('zhangsan2','m'),('lisi2','m');
    insert into dcs(name,sex)values('zhangsan3','m'),('lisi3','m');
    insert into dcs(name,sex)values('zhangsan4','m'),('lisi4','m');
    insert into dcs(name,sex)values('zhangsan5','m'),('lisi5','m');
     
    if (n<>0) then
     select * from dcs where id < n;
    else
     select * from dcs;
    end if;
    end
    //
    delimiter ;
    
    call c(6)        #