Mysql存儲過程當中使用cursor

1、表ide

學生表oop

CREATE TABLE `t_student` (spa

   `stuNum` int(11) NOT NULL auto_increment,ci

   `stuName` varchar(20) default NULL,rem

   `birthday` date default NULL,it

   PRIMARY KEY  (`stuNum`)class

 ) ENGINE=InnoDB DEFAULT CHARSET=utf8date


學生分數表循環

CREATE TABLE `t_stu_score` (im

   `id` int(11) NOT NULL auto_increment,

   `stuNum` int(11) default NULL,

   `score` decimal(6,2) default NULL,

   PRIMARY KEY  (`id`),

   KEY `FK_t_stu_score` (`stuNum`),

   CONSTRAINT `FK_t_stu_score` FOREIGN KEY (`stuNum`) REFERENCES `t_student` (`stuNum`)

 ) ENGINE=InnoDB DEFAULT CHARSET=utf8


學生詳細表

CREATE TABLE `t_stu_detail` (

   `id` int(11) NOT NULL auto_increment,

   `stuName` varchar(20) default NULL,

   `score` decimal(6,2) default NULL,

   PRIMARY KEY  (`id`)

 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

將t_Student和t_stu_score表中知足必定條件的數據插入到t_stu_detail中。


2、過程

DELIMITER &&

 CREATE PROCEDURE proc_AddStuDetail( IN p_score DECIMAL(6,2) )

  BEGIN

DECLARE vstuNum INT;

DECLARE vstuName VARCHAR(20);

DECLARE vbirthday DATE;

DECLARE vscore DECIMAL(6,2);

DECLARE done INT;

-- 定義遊標

DECLARE stuCursor CURSOR

FOR

SELECT stuNum,stuName,birthday FROM t_Student;

-- 定義結束標記

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- 打開遊標

OPEN stuCursor;

-- 循環

stuLoop:LOOP

-- 取遊標中的數據

FETCH stuCursor INTO vstuNum,vstuName,vbirthday;

IF done = 1 THEN

LEAVE stuLoop;

END IF;

IF DATE(vbirthday) >= '1990-03-01' THEN

SELECT score INTO vscore FROM t_stu_score WHERE stuNum = vstuNum;

IF vscore >= p_score THEN

INSERT INTO t_stu_detail VALUES(NULL,vstuNum,vscore);

END IF;

END IF;

END LOOP stuLoop;

-- 關閉遊標

CLOSE stuCursor;

  END

&&

DELIMITER ;


3、調用過程

CALL proc_AddStuDetail(86);

相關文章
相關標籤/搜索