delimiter $$
drop procedure if exists sp_c $$
create procedure sp_c (out oMax int)
begin
    declare cur1 cursor for select eid from emp;
    declare iMax,iTemp int;
    declare i int;
    set i=1;
    open cur1;
    fetch cur1 into  iTemp;
    set iMax=iTemp;
    while i< 500 do
       fetch cur1 into iTemp;
       if iTemp>iMax then
           set iMax=iTemp;
       end if;
    end while;
    close cur1;
    set oMax=iMax;
end$$
delimiter ;我刚学习游标的使用.这里主要有什么问题?还有.哪里有游标的例子啊?

解决方案 »

  1.   

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOUSE pubs
    IF EXISTS (SELECT name FROM sysobjects 
             WHERE name = 'sp_c' AND type = 'P')
       DROP PROCEDURE sp_c
    GO
    create  procedure sp_c
    (
        @oMax  int
     )
    AS
    BEGIN
        -- 為 CURSOR 物件提供變數, 以保存 CURSOR 物件當前行欄位值
         DECLARE @nMax int
         DECLARE rs_cursor CURSOR FOR  
         select eid from emp
        
        OPEN rs_cursor
        FETCH NEXT FROM rs_cursor INTO @nMax
                
        WHILE @@FETCH_STATUS = 0
        BEGIN
           -------------在這裡面做你想要做的事情
          FETCH NEXT FROM rs_cursor INTO @CP_NO            
        END
        CLOSE rs_cursor
        DEALLOCATE rs_cursor
      
    -- 返回資料集
    ReturnData:
           
    -- 事務完成, 退出預存程序
        RETURN 0
    -- 錯誤處理
    ErrorHandler:
        GOTO ReturnData
    END
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  2.   

    mysql 和sql server还是有点区别的吧?