MySQL 預存程序傳參之in, out, inout 參數用法,mysqlinout

來源:互聯網
上載者:User

MySQL 預存程序傳參之in, out, inout 參數用法,mysqlinout
預存程序傳參:預存程序的括弧裡,可以聲明參數。 文法是 create procedure p([in/out/inout] 參數名  參數類型 ..)in :給參數傳入值,定義的參數就得到了值out:模式定義的參數只能在過程體內部賦值,表示該參數可以將某個值傳遞迴調用他的過程(在預存程序內部,該參數初始值為 null,無論調用者是否給預存程序參數設定值)inout:調用者還可以通過 inout 參數傳遞值給預存程序,也可以從預存程序內部傳值給調用者
如果僅僅想把資料傳給 MySQL 預存程序,那就使用“in” 型別參數;如果僅僅從 MySQL 預存程序返回值,那就使用“out” 型別參數;如果需要把資料傳給 MySQL 預存程序,還要經過一些計算後再傳回給我們,此時,要使用“inout” 型別參數。 MySQL 預存程序參數如果不顯式指定"in"、"out"、"inout",則預設為"in"。
執行個體一:預存程序傳參 in

DELIMITER $$CREATE PROCEDURE p1(IN num INT)BEGIN  DECLARE i INT DEFAULT 0;  DECLARE total INT DEFAULT 0;  WHILE i<=num DO    SET total := i + total;    SET i := i+1;  END WHILE;  SELECT total;END$$


執行個體二:預存程序傳參 out
CREATE PROCEDURE p2(OUT num INT)BEGIN SELECT num AS num_1; IF (num IS NOT NULL) THEN SET num = num + 1; SELECT num AS num_2; ELSE SELECT 1 INTO num; END IF; SELECT num AS num_3;END$$SET @num = 10$$CALL p2(@num)$$SELECT @num AS num_out$$


執行個體三:預存程序傳參 inout
CREATE PROCEDURE p3(INOUT age INT)BEGIN  SET age := age + 20;END$$set @currage =18$$call p3(@currage)$$select @currage$$



mysql預存程序出錯

mysql> create PROCEDURE sp_GetPageRecord( IN TableName VARCHAR(100), IN Primar
yKey VARCHAR(50), IN Col1 VARCHAR(255) , IN WhereSql VARCHAR(255) , IN Sort V
ARCHAR(200) , IN PageSize INT , IN CurrPage INT, IN IsDesc BIT(1) ) BEGIN END;
Query OK, 0 rows affected (0.00 sec)

當然首先要確認下MySQL版本。MySQL從5.0版本開始支援預存程序
一、VARCHAR類型最多支援255個字元,超過255個字元可以考慮用TEXT變數。TEXT變數支援最大到65536個位元組。
二、不支援參數中的DEFAULT值。也就是說 = ...這樣的要去掉。
三、必須要有過程體,過程體的開始與結束使用BEGIN與END進行標識。
四、BIT類型支援1-64位的儲存。
五、預存程序中SELECT ... INTO var_list中var_list不能用預存程序的參數。
六、下面需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL預設以";"為分隔字元,如果我們沒有聲明分割符,那麼編譯器會把預存程序當成SQL語句進行處理,則預存程序的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔字元,這樣MySQL才會將";"當做預存程序中的代碼,不會執行這些代碼,用完了之後要把分隔字元還原。
七、預存程序根據需要可能會有輸入、輸出、輸入輸出參數,這裡有一個輸出參數s,類型是int型,如果有多個參數用","分割開。
參數
MySQL預存程序的參數用在預存程序的定義,共有三種參數類型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ] 參數名 資料類形...])
IN 輸入參數:表示該參數的值必須在調用預存程序時指定,在預存程序中修改該參數的值不能被返回,為預設值
OUT 輸出參數:該值可在預存程序內部被改變,並可返回
INOUT 輸入輸出參數:調用時指定,並且可被改變和返回

在mysql命令提示字元下逐行輸入下面的語句。
delimiter //
create procedure `demo_out_total`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT
total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE v_sql VARCHAR(500);
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set v_sql = CONCAT('select count(*) into @total from ',tbl_name, ' where ',wher......餘下全文>>
 
mysql 預存程序

1. exec 預存程序名
2. exec 預存程序名 參數1,參數2,參數3......
或者exec 預存程序名 參數1='',參數2='',參數3=''......
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.