下面简单的存储过程,
delimiter //
drop procedure ranking;//
create procedure ranking(selectID varchar(300))
begin
     --问题在这里这个临时表创建完成后只加进去一条数据,dindon 表里明明是三条啊     
     create temporary table tmpSelect select id,name_fr,name_en from dindon where id in(selectID);
     --下面是结果  
     select id,name_fr,name_en from tmpSelect;     
     drop table tmpSelect;
end;//
delimiter ;
       
call ranking('1,2,3');  --如果单独运行是没错,能加进去三条,太奇怪了??请高手指教     
 create temporary table tmpSelect select id,name_fr,name_en from dindon where id in('1,2,3');

解决方案 »

  1.   

    要拆分selectID:in('1','2','3')
    or
    in(1,2,3)
      

  2.   

    我拆分了,还是不行,
    delimiter //
    drop procedure ranking;//
    create procedure ranking(selectID varchar(300))
    begin
         --问题在这里这个临时表创建完成后只加进去一条数据,dindon 表里明明是三条啊 
         set @concatID = concat("'", replace(selectID, ",", "','"), "'");
         select @concatID;
         create temporary table tmpSelect select id,name_fr,name_en from dindon where id in(selectID);
         --下面是结果  
         select id,name_fr,name_en from tmpSelect;     
         drop table tmpSelect;
    end;//
    delimiter ;
           
    call ranking('1,2,3'); 
      

  3.   

    还有这样也不行
    delimiter // 
    drop procedure ranking;// 
    create procedure ranking(selectID varchar(300)) 
    begin 
        --问题在这里这个临时表创建完成后只加进去一条数据,dindon 表里明明是三条啊 
        create temporary table tmpSelect select id,name_fr,name_en from dindon where id in(selectID); 
        --下面是结果  
        select id,name_fr,name_en from tmpSelect;    
        drop table tmpSelect; 
    end;// 
    delimiter ; 
          
    call ranking(“'1','2','3'"); 
    这样成空的了,一条都没有,
    奇怪的是如果不在存储过程里就可以,一点问题都没有!
      

  4.   

    set @st = concat('create temporary table tmp Select select id,name_fr,name_en from dindon where id in(',replace(dd,"'",""),')');
    prepare s1 from @st;
    execute s1;
    select @st;
      

  5.   

    要动态生成SQL语句,示例:
    CREATE DEFINER=`root`@`localhost` PROCEDURE `try`(dd varchar(300))
    BEGIN
    set @st = concat('create temporary table tmp Select id from aa where id in(',replace(dd,"'",""),')');
    prepare s1 from @st;
    execute s1;
    select @st;
        END$$