小白发帖求助怎么写存储过程
时间:2011-08-08
来源:互联网
我看了教学,发现没看到我需要的东西
比如
CREATE PROCEDURE xx()
BEGIN
/* 我想实现的是,2个表,table1 table2, 把table1里没有,但是table2里有的记录插入到table1里,字段名字不一样。*/
DECLARE done INT;
DECLARE cur_1 CURSOR FOR SELECT id ,email FROM table2;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET done = 1;
OPEN cur_1
/*这里就不会写了,不会对游标操作,第n行第x字段,还有判断另外一个表有没有相同的id email记录*/
CLOSE cur_1;
END;
比如
CREATE PROCEDURE xx()
BEGIN
/* 我想实现的是,2个表,table1 table2, 把table1里没有,但是table2里有的记录插入到table1里,字段名字不一样。*/
DECLARE done INT;
DECLARE cur_1 CURSOR FOR SELECT id ,email FROM table2;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET done = 1;
OPEN cur_1
/*这里就不会写了,不会对游标操作,第n行第x字段,还有判断另外一个表有没有相同的id email记录*/
CLOSE cur_1;
END;
作者: zktz1 发布时间: 2011-08-08
看MYSQL手册中的例子。
引用20.2.11. 光标
20.2.11.1.声明光标
20.2.11.2. 光标OPEN语句
20.2.11.3. 光标FETCH语句
20.2.11.4. 光标CLOSE语句
简单光标在存储程序和函数内被支持。语法如同在嵌入的SQL中。光标当前是不敏感的,只读的及不滚动的。不敏感意为服务器可以活不可以复制它的结果表。
光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。
例如:
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2;
END
20.2.11.1.声明光标
DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个光标。也可以在
20.2.11.1.声明光标
20.2.11.2. 光标OPEN语句
20.2.11.3. 光标FETCH语句
20.2.11.4. 光标CLOSE语句
简单光标在存储程序和函数内被支持。语法如同在嵌入的SQL中。光标当前是不敏感的,只读的及不滚动的。不敏感意为服务器可以活不可以复制它的结果表。
光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。
例如:
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2;
END
20.2.11.1.声明光标
DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个光标。也可以在
作者: ACMAIN_CHM 发布时间: 2011-08-08
有大大回复了!
+++++++++++++++++++++++++++++++++++++++++++++++
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
+++++++++++++++++++++++++++++++++++++++++++++
这段REPEAT之间,假如cur1有4个记录,cur2有6个记录,那么是比较6次呢,还是比较24次?
+++++++++++++++++++++++++++++++++++++++++++++++
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
+++++++++++++++++++++++++++++++++++++++++++++
这段REPEAT之间,假如cur1有4个记录,cur2有6个记录,那么是比较6次呢,还是比较24次?
作者: zktz1 发布时间: 2011-08-08
试一下不就知道了?
作者: ACMAIN_CHM 发布时间: 2011-08-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28