MySQL存儲過程之參數和復合語句


CREATE PROCEDURE p5 ([
    [ IN | OUT | INOUT ] name1 data-type ,
    ...                                                       ,
    [ IN | OUT | INOUT ] nameN data-type 
]) ... 

  參數列表可以為空,也可以有多個,關鍵詞IN | OUT | INOUT,可省略,默認IN.

1. IN 輸入的例子

mysql> CREATE PROCEDURE p5(p INT)
    SET @x = p //
mysql> CALL p5(12345)//
mysql> SELECT @x//

  上面代碼執行后會顯示輸入的12345.過程體內將參數p的值賦值給會話變量x,然后調用過程並傳遞12345給參數p,調用完畢后顯示會話變量@x.

  說明變量名前加@表示為會話變量,作用域為整個用戶的會話周期.不加@表示用戶自定義的局部變量.關於會話變量:

  1) 可以先在用戶變量中保存值然后在以后引用它;這樣可以將值從一個語句傳遞到另一個語句。

  2) 用戶變量與連接有關,即一個客戶端定義的變量不能被其它客戶端看到或使用。當客戶端退出時,該客戶端連接的所有變量將自動釋放。

  3) 用戶變量的形式為@var_name,其中變量名var_name可以由當前字符集的文字數字字符、‘.’、‘_’和‘$’組成。 默認字符集是cp1252 (Latin1)。可以用mysqld的default-character-set選項更改字符集。

  4) 用戶變量名對大小寫不敏感。
  5) 設置用戶變量的一個途徑是執行SET語句:

SET @var_name = expr [, @var_name = expr] ...

    對於SET,可以使用=或:=作為分配符。分配給每個變量的expr可以為整數、實數、字符串或者NULL值。

    也可以用語句代替SET來為用戶變量分配一個值。在這種情況下,分配符必須為:=而不能用=,因為在非SET語句中=被視為一個比較 操作符:

mysql> SET @t1=0, @t2=0, @t3=0;
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;

+-------------------------------+------+------+------+

| @t1:=(@t2:=1)+@t3:=4  | @t1 | @t2  | @t3 |

+-------------------------------+------+------+------+

|          5                           |    5  |    1   |    4  |

+-------------------------------+------+------+------+

  6) 用戶變量可以用於表達式中。目前不包括明顯需要文字值的上下文中,例如SELECT語句的LIMIT子句,或者LOAD DATA語句的IGNORE number LINES子句。

  7) 如果使用沒有初始化的變量,其值是NULL。

2. OUT 輸出的例子

mysql > CREATE PROCEDURE p6 (OUT p INT)
         -> SET p = -5 //
mysql> CALL p6(@y) //
mysql> SELECT @y //  

  本例中,p是輸出參數,調用過程將p的值傳入會話變量@y中.

3. 復合語句

CREATE PROCEDURE p7 ()
BEGIN
    SET @a = 5;
    SET @b = 5;
    INSERT INTO t VALUES (@a);
    SELECT s1 * @a FROM t WHERE s1 >= @b;
END; //   /* 這個語句將不會被調用*/ 

  復合語句一般由BEGIN/END塊包括.可以用塊去封裝多條語句,完成一些sql語句進行變量定義和流程控制等.

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM