和參數不同的是,預存程序是
而參數是
例: mysql>DELIMITER $$
CREATE FUNCTION fun_book(bookId INT)
RETURNS VARCHAR(20)
BEGIN
RETURN(SELECT bookName FROM t_book WHERE id=bookId);
END;
$$
DELIMITER ;
Mysql>SELECT fun_book(1);
因為儲存函數有返回值,所以用SELECT,不能用CALL.
四: 調用預存程序和函數
4.1
CALL sp_name( [parameter[,...]] )
Mysql>CALL pro_book(1);
4.2
fun_name( [parameter[,...]] )
Mysql>SELECT fun_book(1);
五: 查看預存程序和函數
SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE ‘pattern’ ] ;
Mysql>
SHOW PROCEDURE STATUS LIKE 'pro_book';
5.2
SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;
Mysql>SHOW CREATE FUNCTION fun_book;
5.3 從information_schema.Routines 表中查看預存程序和函數的資訊
Mysql>USE information_scherma;
Mysql>SELECT * from Routines;
六: 修改預存程序和函數
ALTER { PROCEDURE | FUNCTION } sp_name [ characteristic ... ]
characteristic :
{ CONTAINS SQL } NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
其中,sp_name 參數表示預存程序或函數的名稱,characteristic 參數指定函數的特性
CONTAINS SQL 表示子程式包含SQL 陳述式,但不包含讀或寫資料的語句
NO SQL 表示子程式中不包含SQL 陳述式
READS SQL DATA表示子程式中包含資料的語句
MODIFIES SQL DATA 表示子程式中包含寫資料的語句
SQL SECURITY{ DEFINER | INVODER } 指明誰有許可權來執行。
DEFINER 表示只有定義者自己才能夠執行;
INVODER 表示調用者可以執行。
COMMENT ‘string’ 是注釋資訊。
例: mysql>ALTER PROCEDURE `pro_book` COMMENT '測試';
修改完後我們來查看一下是否修改成功
Mysql>SHOW PROCEDURE STATUS LIKE `pro_book`;
其實不怎麼推薦用Alter來修改因為Alter
七: 刪除預存程序和函數
DROP {PROCEDURE | FUNCTION } sp_name ;
例: mysql>DROP PROCEDURE `pro_book`;
Mysql>DROP FUNCTION `fun_book`;
八: 預存程序和儲存函數的詳細區別
預存程序是使用者定義的一系列sql語句的集合,涉及特定表或其它對象的任務,使用者可以調用預存程序,而函數通常是資料庫已定義的方法,它接收參數並返回某種類型的值並且不涉及特定使用者表。
預存程序和函數存在以下幾個區別:
1)一般來說,預存程序實現的功能要複雜一點,而函數的實現的功能針對性比較強。
九: 總結
今天為大家帶來了有關預存程序的知識,大家自己消化練習下,下節為大家帶來遊標,變數,流程式控制制的相關知識,謝謝大家!