批量调用SQL函数

SQL菜鸟一枚,遇到个小需求,批量注册账号,一个一个手工操作肯定不是SQLer的风格啊,在有限的技术下找了点小捷径完成,过程如下。

难点:一个账号关联多表,注册过程涉及多表INSERT,使用sql函数完成。INSERT到多表,又是多个值,不太方便批量操作。

原始注册函数如下(重点是下边的一串INSERT到不同的表):



所以不打算批量INSERT了,而是批量调用“注册”SQL函数


特例&捷径:如果账号不一样,不管怎么都免除不了手工输入的烦恼。不过此例因为批量账号要求的是连号,比如19000000000-19000000119,使用递增循环插入的方式可以快捷完成。


首先:将”注册“SQL函数改为SQL存储过程,方便使用CALL调用——因为我只会SELECT调用,而使用SELECT调用SQL函数是要返回结果的,循环SELECT会返回结果集,函数不允许返回结果集,而SELECT又不能调用存储过程,所以将”注册“改成SQL过程就可以用CALL调用了(并且要取消以前的一些条件判断和RETURN,毕竟是人为批量插入,条件可控)。




然后:完成如下批处理注册函数,用来CALL ”注册“SQL过程:

一个起始地址,一个循环,每次递增1,去调用注册过程:


CREATE DEFINER=`root`@`%` FUNCTION `f_register_nonverification_batch`(`_lluser` Bigint(20), `_pcpsw` Varchar(32),`_number` Bigint(20)) RETURNS int(11)
BEGIN
  DECLARE iRet Int DEFAULT 0;       #返回值
  DECLARE iCount Int DEFAULT 0;
  DECLARE llUserTemp BigInt DEFAULT 0;
  WHILE (iCount < _number) DO
  BEGIN
   SET llUserTemp = _lluser + iCount;
   CALL p_register_nonverification(llUserTemp,_pcpsw);
   SET iCount = iCount + 1;
  END;
  END WHILE;
  RETURN 0;
END;


最后传参(起始账号,密码,插入数量),打印头尾查看,插入成功


来个全的:


大概就是这意思了。

走了很多捷径,有问题和其他方法欢迎指正提出。












你可能感兴趣的:(存储过程,mysql,服务器,sql函数,批量调用)