美文网首页
mysql存储过程调用

mysql存储过程调用

作者: 无拘无束的思想家 | 来源:发表于2022-04-28 23:31 被阅读0次

创建两个表

分别在两个库中创建两张表,建表语句分别如下:
test1(mytest1的库中)

-- ----------------------------
-- Table structure for test1
-- ----------------------------
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `status` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of test1
-- ----------------------------
INSERT INTO `test1` VALUES ('1', '12', '111', '1');
INSERT INTO `test1` VALUES ('2', '32', '222', '1');
INSERT INTO `test1` VALUES ('3', '22', '333', '1');

test2表(mytest2的库中)

DROP TABLE IF EXISTS `test2`;
CREATE TABLE `test2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

实现的功能

1.创建游标c1遍历 test1表,取出所有字段数据信息v_id,v_name,v_age
2.根据c1.v_id查询test2表中是否包含有重复记录,如果有记录,并且test1表中的status 状态为0的时候才会更新test2记录,将test1表中的status 状态 0→1
3.如果c1.v_id查询test2表中没有包含重复的记录,则直接插入test2表中,并且将status状态 0→1

存储过程的实现

DELIMITER //
 CREATE PROCEDURE GetScoreByStu (out result VARCHAR(300))
BEGIN

DECLARE v_id int DEFAULT 0;
DECLARE v_name VARCHAR(20);
DECLARE v_age int;
-- 定义循环条件
    DECLARE flag INT DEFAULT 0;
    DECLARE v_count INT DEFAULT 0;
    DECLARE v_status INT DEFAULT 0;
 -- SELECT student_score FROM tb_students_score WHERE student_name=name;
DECLARE v_result VARCHAR(300) DEFAULT '';

-- 申明游标
DECLARE c1 CURSOR FOR SELECT id,name,age from test1;
--  当没有行可以循环时  done 为真
declare continue  handler for sqlstate '02000' set flag =1;

OPEN c1;

-- 遍历所有行
-- repeat
while flag<>1 do
 --  获取订单号
 fetch c1 into v_id,v_name,v_age;
    -- SET @sqlcmd = CONCAT(v_id,'---',v_name,'---',v_age); 
    -- SELECT @sqlcmd ; /*输出执行的sql语句*/

    SET @sqlcmd = CONCAT('SELECT COUNT(0) into @v_count from  mytest2.test2 where id=',v_id);   
     
     SELECT @sqlcmd ;   /*输出执行的sql语句*/
    PREPARE gsql from @sqlcmd;
  EXECUTE gsql;
  DEALLOCATE PREPARE gsql;
    
    IF @v_count=0 THEN
            SET @sqlcmd = CONCAT('insert into mytest2.test2 (id,name,age) values(',v_id,',',v_name,',',v_age,')');  
     
             SELECT @sqlcmd ;   /*输出执行的sql语句*/
            PREPARE gsql from @sqlcmd;
            EXECUTE gsql;
            DEALLOCATE PREPARE gsql;
    ELSE
         SET @sqlcmd = CONCAT('update  mytest2.test2 set name=',v_name,',age=',v_age,' where id=',v_id);    
     
             SELECT @sqlcmd ;   /*输出执行的sql语句*/
            PREPARE gsql from @sqlcmd;
            EXECUTE gsql;
            DEALLOCATE PREPARE gsql;
    END IF;

            -- 最后 全部更新完成之后,直接回写源表 对应的状态值为1,默认值为0
         SET @sqlcmd = CONCAT('update  mytest1.test1 set status=1 where id=',v_id,' and status<>1');    
     
             SELECT @sqlcmd ;   /*输出执行的sql语句*/
            PREPARE gsql from @sqlcmd;
            EXECUTE gsql;
            DEALLOCATE PREPARE gsql;
    -- select @v_count;

-- 直到完成结束重复;
-- until flag  end repeat;
end while;
CLOSE c1;


-- set @v_result=1;

-- SELECT @v_result;
 END //

调用方式

set @num='';
call GetScoreByStu(@num);

相关文章

  • Mysql存储过程

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 创建存储过程 调用存储过程 存储过程...

  • mysql存储过程调用

    创建两个表 分别在两个库中创建两张表,建表语句分别如下:test1(mytest1的库中) test2表(myte...

  • SQL语言:存储过程

    前言 本章我们将学习数据库中的存储过程,了解什么是存储过程,以及在MySQL中创建和调用存储过程。 存储过程是什么...

  • mybatis调用mysql存储过程

    一.在mysql中新建test表 二.新建存储过程(根据id查询name值) 三.定义mapper接口 四.编写m...

  • MySQL存储过程使用解析

    mysql存储过程 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一...

  • MySQL 存储过程,获取使用游标查询的结果集

    MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?解决方案:存储过程不返回数...

  • 2020-01-16

    Mysql 的管理工具Sequel Pro 存储过程 调用直接命令行使用call 调用即可

  • Java调用存储过程

    Java调用存储过程 调用存储过程 调用存储函数 cursor作为out参数返回

  • (五)MyBatis 调用Mysql存储过程

    1.准备数据库和建表过程 2.userMapper.xml: 3.mybatis.xml 4测试代码如下: Myb...

  • 15 MySQL 存储过程

    MySQL 存储过程 [toc] 存储过程概述 存储过程介绍 存储过程,相当于是 MySQL 语句组成的脚本 指的...

网友评论

      本文标题:mysql存储过程调用

      本文链接:https://www.haomeiwen.com/subject/csujyrtx.html