mysql中如何使用存储过程为一个字段添加值

mysql中如何使用存储过程为一个字段添加值,第1张

create proc Mypro

as

begin tran t1

declare @Myii int,@id int

begin

select @Myii=1

declare cur1 cursor for select id from 一个表

open cur1

fetch next from cur1 into @id

while(@@fetch_status=0)

begin

update 一个表 set 序号=@Myii where id=@id

select @Myii=@Myii+1

fetch next from cur1 into @id

end

close cur1

deallocate cur1

end

commit tran t1

--因为使用的游标,而你的数据量又大,可能执行的时间有点长

CREATE PROCEDURE PRO1()

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE a CHAR(3);

DECLARE cur1 CURSOR FOR SELECT data FROM testdata1;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cur1;

REPEAT

FETCH cur1 INTO a;

CASE FLOOR(1 + (RAND() 3))

WHEN 1 THEN INSERT INTO T_1 VALUES(a);

WHEN 2 THEN INSERT INTO T_2 VALUES(a);

WHEN 3 THEN INSERT INTO T_3 VALUES(a);

END;

UNTIL done END REPEAT;

CLOSE cur1;

END

(1)CONCAT()//字符连接

(2)CONCAT_WS()//使用指定的分隔符进行字符连接

(3)FORMAT()//数字格式化

(4)LOWER()//转化小写

(5)UPPER()//转换大写

(6)LEFT()//获取左侧字符

(7)RIGHT()//获取右侧字符

(8)LENGTH()//取得字符串长度

(9)LTRIM(),RTRIM(),TRIM()//删除前导、后续空格或者指定字符

(10)REPLACE()//替换

(11)SUBSTRING()//字符串截取

(12)[NOT] LIKE//模式匹配——百分号%代表任意个字符;下划线_代表任意一个字符

方案一: 存储过程

DROP PROCEDURE IF EXISTS SP_COLUMN_ADD;

DELIMITER $$

CREATE PROCEDURE SP_COLUMN_ADD()

BEGIN

 

  DECLARE command VARCHAR(200);

  

  DECLARE founded INT DEFAULT 1;   

  DECLARE column_duplicated BOOLEAN DEFAULT FALSE;

  

  #把这个游标的语句查下,是否满足需求

  DECLARE cur_sleest CURSOR FOR 

   SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' ADD COLUMN YOUR_COLUMN YOUR_TYPE;') AS SQL_COMMAND

          #eg: `ALTER TABLE TMP_SLEEST ADD COLUMN C1 INT,ADD COLUMN C2 VARCHAR(2);`

     FROM INFORMATION_SCHEMATABLES

    WHERE TABLE_SCHEMA="yourschema"  

      AND TABLE_TYPE="BASE TABLE";

        

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET founded = 0;    

  DECLARE CONTINUE HANDLER FOR 1060 SET column_duplicated = true;

       

  OPEN cur_sleest;  

  

  sleet_loop : LOOP

    FETCH cur_sleest INTO command;

    IF founded = 0 THEN LEAVE sleet_loop; END IF;    

    SET @sql := command;

    PREPARE stmt FROM @sql;

    EXECUTE stmt;    

    DEALLOCATE PREPARE stmt;

  END LOOP sleet_loop;

  

  CLOSE cur_sleest;

END$$

DELIMITER ;

方案二: 扫出指令集合到本地文件,贴到命令行执行

SELECT CONCAT("ALTER TABLE ", TABLE_NAME," ADD COLUMN YOUR_COLUMN YOUR_TYPE;")

  FROM INFORMATION_SCHEMATABLES

 WHERE TABLE_SCHEMA="yourschema"  

   AND TABLE_TYPE="BASE TABLE"

  INTO OUTFILE 'D:\\add-columnsql'

不推荐存储过程, 因为可能要处理1060(duplicated column)等问题, 存储过程不是很好弄,中间过程也不好跟踪, 不一定能查出哪里错了;

第二种方案直接在命令行中贴上,每一个句话正确错误一看就明了

DECLARE cur CURSOR FOR SELECT i FROM tablename;

-- 将结束标志绑定到游标

DECLARE CONTINUE HANDLER FOR NOT FOUND SET ending = TRUE;

-- 打开游标

OPEN cur;

--使用游标代码

--关闭游标

CLOSE cur;

END

值得注意的一点是其中的declare顺序不可改变,即其他变量声明放在最前,游标及结束绑定的声明要放在后边,而且声明前不可有其他类型语句,否则会有符号错误。

游标使用的方法:

REPEAT

 --游标储存一列

FETCH cur INTO a;

--游标储存多列

FETCH cur INTO a,b·····;

UNTIL ending

END REPEAT ;

关于结束标志:

结束标志是先通过一个FETCH INTO ,然后判断游标中是否还存在内容,如果没有内容就会执行 SET ending = TRUE; (定义代码中的),然后通过ending的判断即可跳出循环。

标签: mysql

好文要顶 关注我 收藏该文

不笨的鸟也要先飞

关注 - 4

粉丝 - 0

+加关注

0

0

« 上一篇:关于jq两个监听事件

» 下一篇:php发送邮件

posted @ 2016-03-07 23:44 不笨的鸟也要先飞 阅读(208) 评论(0) 编辑 收藏

以上就是关于mysql中如何使用存储过程为一个字段添加值全部的内容,包括:mysql中如何使用存储过程为一个字段添加值、mysql数据库存储过程问题,求大师指教、mysql存储过程在游标中怎么使用变量作为表明等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10162932.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存