本文共 2149 字,大约阅读时间需要 7 分钟。
存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合。调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,对提高数据处理效率有好处。
存储过程和函数的主要区别在于,函数必须有返回值,而存储过程没有。函数是一个有返回值的过程;存储过程是一个没有返回值的函数。
CREATE PROCEDURE procedure_name ([proc_parameter[,...]]) begin -- SQL 语句end;
DELIMITER 关键字。mysql> delimiter $mysql> create procedure pro_test1() -> begin -> select * from city; -> end$
DELIMITER 用于声明 SQL 语句的分隔符。默认情况下,分隔符是分号。通过 DELIMITER $ 可以将分隔符更改为 $。
call procedure_name() ;
mysql> call pro_test3() -> +-------------+| hello mysql |+-------------+| hello mysql |+-------------+1 row in set (0.04 sec)
-- 查询数据库中所有存储过程select name from mysql.proc where db='db_name';-- 查询存储过程的状态信息show procedure status;-- 查询某个存储过程的定义show create procedure test.pro_test1 \G;
mysql> select name from mysql.proc where db='demo_01' -> +-----------+| name |+-----------+| pro_test1 || pro_test2 || pro_test3 |+-----------+3 rows in set (0.06 sec)
DROP PROCEDURE [IF EXISTS] sp_name ;
mysql> drop procedure pro_test3 -> Query OK, 0 rows affected (0.00 sec)
DECLARE 声明局部变量。declare var_name[,...] type [default value];
IF 语句进行条件判断。if search_condition then statement_list [elseif search_condition then statement_list] ... [else statement_list] end if;
IN 关键字,输出参数使用 OUT 关键字,混合参数使用 INOUT 关键字。create procedure procedure_name([in/out/inout] 参数名 参数类型) ...
CASE 结构进行条件判断。CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE;
while 循环进行循环控制。while search_condition do statement_list end while;
CREATE FUNCTION function_name([param type ... ]) RETURNS type BEGIN ... END;
delimiter $ create function count_city(countryId int) returns int begin declare cnum int; select count(*) into cnum from city where country_id = countryId; return cnum;end$delimiter ;
select count_city(1);select count_city(2);
转载地址:http://hhdfk.baihongyu.com/