zoukankan      html  css  js  c++  java
  • 用 Navicat 写mysql的游标

    千言万语也比不上一个简单直接明了的小例子:

    CREATE PROCEDURE pro_users()
    begin
             DECLARE myid int;
             DECLARE no int;
             DECLARE mysellerid char(10);    
             DECLARE mylink char(50);    
             DECLARE myip char(50);    
             DECLARE mycursor CURSOR FOR select id from table1; #把select出来的数据全部保存到游标mycursor中
             DECLARE CONTINUE HANDLER FOR NOT FOUND SET no=1; #当读到数据的最后一条时,设置no变量为1
             SET no=0; #初始化变量no为0
             OPEN mycursor; #打开游标
                         while no=0 do #判断是不是到了最后一条数据
                                     fetch mycursor into myid; #读取游标中的数据一一复给变量myidselect sellerid,link,ip into mysellerid,mylink,myip
                                        from table2 order by RAND() LIMIT 1;
                                        update table1 set 
                                        wangba_uid = ceil(rand()*500),
                                        wangba_sellerid = mysellerid,
                                        wangba_link = mylink,
                                        wangba_ip = myip
                                        where id = myid;
                         end while;
             close mycursor;#最后关闭游标.游标里面存放了那么多数据总是要清理掉的吧。
    end

    注意了:这些声明语法必须写在存储过程里面才生效,否则navicat就提示语法错误。

    完了执行一下:

    call pro_users()

    与sql不同,mysql执行存储过程使用call命令。

    删除存储过程:

    drop PROCEDURE pro_users

    删除存储过程,mysql和sql一样都用drop。

    其他:

    select sellerid,link,ip into mysellerid,mylink,myip from table2 order by RAND() LIMIT 1;

    mysql使用select into的形式给变量赋值,RAND()随机记录,LIMIT 1代替TOP 1

    这句话在sql里面的写法:

    select top 1 mysellerid=sellerid,mylink=link,myip=ip from table2 order by newid();
  • 相关阅读:
    HDOJ 3547 DIY Cube 解题报告
    一些经典的期望问题

    人生
    BZOJ 4341 [CF253 Printer] 解题报告
    BZOJ 4302 Buildings 解题报告
    OI 回忆录
    PyQt实现测试工具
    PyQt:eg4
    pyQt: eg3
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/5132771.html
Copyright © 2011-2022 走看看