本文章來介紹一下關(guān)于mysql5的新特性存儲過程了,在mysql5之前是沒有存儲過程這一說的,下面我們來看看mysql5存儲過程的用法.
MySQL 5.0:新特性教程是為需要了解5.0版本新特性的MySQL老用戶而寫的,簡單的來說是介紹了“存儲過程、觸發(fā)器、視圖、信息架構(gòu)視圖.
格式:
- CREATE PROCEDURE 過程名 ([過程參數(shù)[,...]])
- [特性 ...] 過程體
- CREATE FUNCTION 函數(shù)名 ([函數(shù)參數(shù)[,...]])
- RETURNS 返回類型
- [特性 ...] 函數(shù)體
過程參數(shù):[ IN | OUT | INOUT ] 參數(shù)名 參數(shù)類型
函數(shù)參數(shù):參數(shù)名 參數(shù)類型
返回類型:有效的MySQL數(shù)據(jù)類型即可
特性:
- LANGUAGE SQL
- | [NOT] DETERMINISTIC
- | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
- | SQL SECURITY { DEFINER | INVOKER }
- | COMMENT 'string'
過程體/函數(shù)體:格式如下:
- BEGIN
- 有效的SQL語句
- END
實(shí)例:
- DELIMITER $$
- DROP PROCEDURE IF EXISTS `spTest` $$
- CREATE PROCEDURE `spTest`(p_title VARCHAR(200), p_description TEXT) --Vevb.com
- DETERMINISTIC
- BEGIN
- INSERT INTO category (title, description)
- VALUES (p_title, p_description);
- END $$
- DELIMITER ;
其中DELIMITER是用來決定SQL分隔符號的,在寫Stored Procedure前,要先把預(yù)設(shè)的分號換掉,寫完 Stored Procedure 的 routine_body 后,再回復(fù)成預(yù)設(shè)的分號.
--刪除:drop procedure if exists up_common_select
--創(chuàng)建
- CREATE PROCEDURE `up_common_select`(
- in t_name varchar(50)
- )
- begin
- declare v_sql varchar(500);
- set v_sql= concat('select * from ',t_name);
- select v_sql;
- --
--注意:prepare(預(yù)處理)execute stmt using @var,只能跟@var變量,declare和傳入的變量不行!!!
- set @v_sql=v_sql;
- prepare stmt from @v_sql;
- EXECUTE stmt ;
- deallocate prepare stmt;
- end;
--調(diào)用:call up_common_select('admin_authority');
注意事項(xiàng):
1 mysql5.0.13之后支持在存儲過程中調(diào)用prepare
2, prepare stmt from 'select * from ?';(錯(cuò))
mysql5.0.24,prepare尚不支持 表名做變量!
解決方案:用 contat()函數(shù),組合字符串
3. execute stmt [using @var,@var2]
必須是@var形式的變量,傳入的參數(shù)變量,declare變量不行
4.deallocate prepare stmt; 顯式的釋放prepare,如果不釋放,mysql會釋放,!
新聞熱點(diǎn)
疑難解答
圖片精選