想更新表role 把grade属性+1,更新那些name在top表中按grade排列前paramLimit名的人  在top和role中都有名为name的列DROP PROCEDURE IF EXISTS UpdateGrade;
CREATE PROCEDURE UpdateGrade(
IN paramGrade INT,
IN paramLimit INT
)
BEGIN  SET @result = 0;        
  UPDATE role SET
      grade=grade+1
  WHERE name is in(SELECT name from top where grade = paramGrade orderby grade limit paramLimit);  SET @result = paramGrade;
END

解决方案 »

  1.   

    beginset @sql = concat('create table temp_top select name from top order by grade limit ',paramlimit )
    prepare stmt from @sql;
    execute stmt;update role A,temp_top B
    set A.grade = A.grade + 1
    where A.name = B.namedrop table temp_topend
      

  2.   

    谢谢 请问是否需要 DEALLOCATE PREPARE stmt;
    还有这里为什么要这么写 而不是直接写creat table。我不太了解数据库
      

  3.   

    BEGIN  SET @result = 0;        
        SET @prepareStatement = CONCAT(.....);
    PREPARE stmt FROM @prepareStatement;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
      
      SET @prepareStatement1 = CONCAT(.....);
    PREPARE stmt FROM @prepareStatement1;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
    END可以这样写吗 如果我想排两个序的话   还是必须要放在两个存储过程里
      

  4.   

    为什么写存储过程 而不是直接写creat table呢