下面这个是MS sql的函数
返回一个table类型
我想在转到mysql下使用
可是他一直在返回类型上面报错(参数我已去掉@)CREATE FUNCTION f_Cid(@ID int) RETURNS @t_Level TABLE(ID int,Level int) 
AS 
BEGIN 
  DECLARE @Level int 
  SET @Level=1 
  INSERT @t_Level SELECT @ID,@Level 
  WHILE @@ROWCOUNT>0 
  BEGIN 
    SET @Level=@Level+1 
    INSERT @t_Level SELECT a.ID,@Level 
    FROM tb a,@t_Level b 
    WHERE a.PID=b.ID 
    AND b.Level=@Level-1 
  END 
  RETURN 
END 
GO 

解决方案 »

  1.   

    MYSQL没有表变量,用表来保存结果
      

  2.   

    是的,你只能生成一个 create temporary table xx 然后其它过程可以访问这个xx表。临时表在connection 中断后会被自动清除。
      

  3.   

    我在重新写一个存储过程
    可是怎么样取出在存储过程中select出来的结果集
      

  4.   

    你想在什么地方引用这个结果集?如果是在C中,PHP中等,你可以直接象执行select * from aa一样调用call xxx();的结果集。
    如果是其它存储过程中,你可以使用生成的临时表。
      

  5.   

    我是在存储过程中执行select语句,然后通过结果集执行其它命令(就是在存储过程中的上下文)
    就如我上面的那个函数那样INSERT @t_Level SELECT @ID,@Level 
      WHILE @@ROWCOUNT>0 
      BEGIN 
        SET @Level=@Level+1 
        INSERT @t_Level SELECT a.ID,@Level 
        FROM tb a,@t_Level b 
        WHERE a.PID=b.ID 
      

  6.   

    CREATE FUNCTION f_Cid(@ID int) RETURNS @t_Level TABLE(ID int,Level int) 首先,要先明确一个问题,就是MYSQL函数无法返回一个记录集
    你只能创建一个临时表,把记录放到这个表中!或许你可以看一下这个贴了。
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx