delimiter //
drop function childSearch; //
create function childSearch(_index int,_selected varchar(200)) 
returns varchar(20)
begin
      declare sSQL varchar(500); 
      declare resultValues varchar(200);      
      set sSQL = 'select id from matrice order by id limit 1 into resultValues;'); --给resultValues赋值 然后返回
      set @stmt = sSQL;
      prepare s1 from @stmt;
      execute s1;
      deallocate prepare s1;   
      return resultValues; --返回resultValues
end//
delimiter ;
这样写就报错了,还觉得有点别扭!!!
请教高手指点,应该怎么写,!
  
       

解决方案 »

  1.   

    set resultValues=1;
    什么错误信息?
      

  2.   

    ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger
    .
      

  3.   

    自问自答一下。在MySQL的手册中:I.1. 对存储子程序和触发程序的限制
    存储子程序不能包含任意SQL语句。在存储子程序中,禁止使用下述语句:
    ·         SQL预处理语句(PREPARE、EXECUTE、DEALLOCATE PREPARE)。隐含意义:不能在存储子程序中使用动态SQL语句(其中,能够以字符串形式构造动态语句,然后执行它们)。从MySQL 5.0.13开始,对于存储程序放宽了该限制,但该限制仍适用于存储函数和触发程序。于是,delimiter //
    drop function childSearch; //
    create function childSearch(_index int,_selected varchar(200)) 
    returns varchar(20)
    begin
         declare resultValues varchar(200);      
         select id from matrice order by id limit 1 into resultValues;         
          return resultValues; --  返回resultValues
    end//
    delimiter ;在这里,不要使用execute语句,直接改为“