mysql存储过程:实现一个表复制另一个表的字段
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;
总结:没有解决问题,只是把不同的字段信息获取了,用游标遍历的是指单个字段,但是程序能运行并且游标能运行没问题。
上一篇: Mysql存储结构多层循环的多种方式
推荐阅读