您的位置:首页 > 数据库 > MySQL

mysql 调用存储过程

2017-01-13 17:38 232 查看

一/项目描述:

根据authors表查询所有的作者,并在authortitle表中根据作者查询出单独的著书数量和合作著书数量,并存储到count表中



二/sql查询语句

存储过程p3:

DELIMITER $$
DROP PROCEDURE IF EXISTS p3$$
CREATE
   
    PROCEDURE `pubs`.`p3`(aid VARCHAR(20))
   
    BEGIN
    DECLARE n INT DEFAULT 0;
    DECLARE tid VARCHAR(20);
    DECLARE single_num INT DEFAULT 0;
    DECLARE co_num INT DEFAULT 0;
    DECLARE total_num INT;
    DECLARE pd_num INT;
    DECLARE yb CURSOR FOR
    SELECT title_id,COUNT(1) AS COUNT FROM titleauthor AS ta WHERE ta.au_id=aid;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET n=1;
    OPEN yb;
    WHILE n=0 DO
    FETCH yb INTO tid,total_num;
    SELECT COUNT(*) INTO pd_num FROM titleauthor AS ta WHERE ta.title_id=tid;
    
    IF pd_num>1 THEN
    SET co_num=co_num+1;
    END IF;
    END WHILE;
    
    SET single_num=total_num-co_num;
    INSERT INTO count1 VALUES(aid,single_num,co_num);
    CLOSE yb;
    END$$

DELIMITER ;


存储过程p4:

DELIMITER $$
DROP PROCEDURE IF EXISTS p4$$
CREATE PROCEDURE `pubs`.`p4`()

    BEGIN
    DECLARE n1 INT DEFAULT 0;
    DECLARE aid VARCHAR(20);
    DECLARE yb CURSOR FOR
    SELECT au_id FROM AUTHORS;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET n1=1;
    OPEN yb;
    FETCH yb INTO aid;
    REPEAT
    CALL p3(aid);
    FETCH yb INTO aid;
    UNTIL n1=1 END REPEAT;
    CLOSE yb;
    END$$
DELIMITER ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息