DELIMITER $$DROP PROCEDURE IF EXISTS `journalx_standard`.`aa`$$CREATE PROCEDURE `journalx_standard`.`aa` ()
BEGIN
declare i int;
declare mag_id int;
set mag_id=5;
select max(flag) as i from add_second_author;
if(i is null) then
  Set i=1;
else
 set i=i+1;
end if;
if not exists (select * from add_second_author where  id=22 and mag_id=5) then
   insert add_second_author select 22,mag_id,'person.label.province',22,1,'person.province',22 ;
end if;
END$$DELIMITER ;我写的存储过程,单独执行语句也没有错误,调用的时候也没有错,执行的结果,却是显示出来一条数据。哪里出错了啊?谢谢

解决方案 »

  1.   

    select max(flag) into i from add_second_author;
      

  2.   

    select max(flag) as i from add_second_author;改为select max(flag) into i from add_second_author;SQL语句赋值给变量。
      

  3.   

    http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#variables-in-stored-procedures
    20.2.9.3. SELECT ... INTO语句
    SELECT col_name[,...] INTO var_name[,...] table_expr这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。 SELECT id,data INTO x,y FROM test.t1 LIMIT 1;注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。 重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的: