小白发帖如何写存储过程

小白发帖求助怎么写存储过程

我看了教学,发现没看到我需要的东西

比如

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

小白发帖如何写存储过程

相关文章:

你感兴趣的文章:

标签云: