• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

小白发帖如何写存储过程

mysql 搞代码 7年前 (2018-05-31) 201次浏览 已收录 0个评论

小白发帖求助怎么写存储过程
我看了教学,发现没看到我需要的东西
比如
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;

——解决方案——————–
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
这个语句声明一个光标。也可以在

——解决方案——————–
试一下不就知道了?
——解决方案——————–
完全没必要用游标

create procedure sp_test()
begin
insert into tb1(a,b)
select a,b from tb2 A where not exists (select 1 from tb1 where A.a=a and A.b=b)
end
——解决方案——————–
我想实现的是,2个表,table1 table2, 把table1里没有,但是table2里有的记录插入到table1里,字段名字不一样
insert into t1(f1,f2)
select a.f1,a.f2 from t2 a left join t1 b on a.userid = b.uid where b.uid is null


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:小白发帖如何写存储过程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址