定义存储过程
DELIMITER //
CREATE PROCEDURE get_current_date()
BEGIN
SELECT now();
END
//
DELIMITER ;
执行存储过程
call get_current_date();
输入输出参数
1、输入参数
DELIMITER //
CREATE PROCEDURE show_param_in(IN p_in int)
BEGIN
SELECT p_in;
SET p_in = 2;
SELECT p_in;
END;
//
DELIMITER ;
call show_param_in(1);
2、输出参数
DELIMITER //
CREATE PROCEDURE show_param_out(OUT p_out int)
BEGIN
SELECT p_out;
SET p_out = 2;
SELECT p_out;
END;
//
DELIMITER ;
SET @p_out=1;
call show_param_out(@p_out);
select @p_out;
3、输入输出参数
DELIMITER //
CREATE PROCEDURE show_param_inout(INOUT p_inout int)
BEGIN
SELECT p_inout;
SET p_inout = 2;
SELECT p_inout;
END;
//
DELIMITER ;
SET @p_inout = 1;
call show_param_inout(@p_inout);
select @p_inout;
使用游标处理数据
DELIMITER $$
DROP PROCEDURE IF EXISTS update_src_owner$$
CREATE PROCEDURE update_src_owner()
READS SQL DATA
BEGIN
DECLARE l_src_id char(36);
DECLARE l_owner_id varchar(100);
DECLARE l_creation_date varchar(100);
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT src_id, owner_id, creation_date FROM uni_proj_src ps inner join uni_proj p on ps.proj_id = p.proj_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur1;
emp_loop: LOOP
FETCH cur1 INTO l_src_id, l_owner_id, l_creation_date;
IF done=1 THEN
LEAVE emp_loop;
END IF;
update uni_src set owner_id=l_owner_id, creation_date=l_creation_date where src_id=l_src_id;
END LOOP emp_loop;
CLOSE cur1;
END$$
DELIMITER ;
