设为首页 收藏本站
查看: 642|回复: 0

[经验分享] mysql存储过程:实现一个表复制另一个表的字段

[复制链接]

尚未签到

发表于 2016-10-24 00:51:46 | 显示全部楼层 |阅读模式
  1.存储过程
  功能:登录验证
  逻辑:
  (1)参数说明:
  v_name:用户登录名
  v_psd:用户密码
  v_out:用户不存在或用户密码不正确的是否v_out=1,否则v_out=9
  (2)步骤:
  a.从用户表user查询用户名为v_name的用户是否存在
  存在则进入下一步,否则v_out=1
  b.从用户表user查询用户名为v_name的用户的密码pass
  判断用户密码和v_psd是否相等,相等时v_out=9否则v_out=1
  代码

DELIMITER $$
CREATE PROCEDURE proc_login
(IN v_name VARCHAR(16),
IN v_psd VARCHAR(8),
OUT v_out INT)
BEGIN
DECLARE v_pass VARCHAR(8) ;
DECLARE v_num INT ;
SELECT COUNT(*) INTO v_num FROM USER WHERE NAME=v_name;
IF v_num<>0 THEN
SELECT pass INTO v_pass FROM USER WHERE NAME=v_name;
IF v_pass=v_psd THEN
SET v_out=9;
ELSE
SET v_out=1;
END IF;
ELSE
SET v_out=1;
END IF;
END$$
DELIMITER ;
 
  2.复制第一个表的字段到第二个表上
  功能:复制字段
  逻辑:
  1.用1条sql语句查询出所有不同的字段的信息,并存入游标中
  SELECT * FROM information_schema.COLUMNS WHERE table_name = 'sp_usercoupon1' AND table_schema = 'cpdb_dev'  AND COLUMN_NAME NOT IN
  (SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE table_name = 'sp_usercoupon' AND table_schema = 'cpdb_dev');
  
  2.遍历游标,游标的每行分别是rowtype类型的变量。rowtype.字段名方式获取字段数据
  3.获取cloumn_name,data_type,character_maximum_length拼接alter table语句。
  4.执行一次alter table语句。
  难点:mysql没有rowtype这样代表正行的数据类型。
  

DELIMITER $$
CREATE PROCEDURE print
(OUT a VARCHAR(50),
OUT b VARCHAR(50),
OUT c VARCHAR(50))
BEGIN
DECLARE _kubauserid1 VARCHAR(50);
DECLARE _kubauserid2 VARCHAR(50);
DECLARE _kubauserid3 VARCHAR(50);
DECLARE flag INT;   
DECLARE update_cursor CURSOR
FOR
SELECT column_name,data_type,character_maximum_length FROM information_schema.COLUMNS WHERE table_name = 'sp_usercoupon1' AND table_schema = 'cpdb_dev'  AND COLUMN_NAME NOT IN
(SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE table_name = 'sp_usercoupon' AND table_schema = 'cpdb_dev');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;
SET flag=0;
OPEN update_cursor;
REPEAT  /*循环*/
FETCH update_cursor INTO _kubauserid1,_kubauserid2,_kubauserid3;
SET a=_kubauserid1;
SET b=_kubauserid2;
SET b=_kubauserid3;
SELECT a,b,c;
/*update set where*/
UNTIL flag
END REPEAT;
CLOSE update_cursor ;
END$$
DELIMITER ;

CALL print(@a,@b,@c);
SELECT @a,@b,@c;
  总结:没有解决问题,只是把不同的字段信息获取了,用游标遍历的是指单个字段,但是程序能运行并且游标能运行没问题。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290242-1-1.html 上篇帖子: 在spring+hibernaet+mysql事务处理中遇到的一些坑 下篇帖子: SSMAを活用してMySQL/AccessからSQL Server/Azureへマイグレーション
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表