2010-12-16 25 views
1

由于一周使用MYSQL,需要执行存储过程以及视图,但是面临一些问题检索函数返回的值。 这里的功能:无法检索从mysql函数返回的值

 CREATE DEFINER=`root`@`localhost` FUNCTION `GetProductIdsStringByEnquiryId` 
     (
     InEnquiryId int 
     ) RETURNS varchar(4000) CHARSET utf8 
     BEGIN 
     DECLARE InProductIds varchar(4000); 
     DECLARE ProductId varchar(50); 
     DECLARE x,y,z INT; 
     DECLARE sp1_cursor CURSOR FOR SELECT ProductId FROM enquiryproductid where 
      EnquiryId=InEnquiryId; 
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET z = 1; 
     SET InProductIds=''; 
     OPEN sp1_cursor; 
     REPEAT 
     FETCH sp1_cursor INTO ProductId; 
     SETInProductIds=concat(InProductIds,ProductId,','); 
     UNTIL (z=1) 
     END REPEAT; 
     CLOSE sp1_cursor; 
     RETURN InProductIds ; 
    END 

我最初与SQL Server 2005,而我已经写在他们我试着在MySQL作为上述转换它的函数的工作, 这里的SQL功能代码:

 CREATE function [dbo].[GetBranchIdsStringByEmployeeId] 
     (
    @EmployeeId as integer 
     ) 
     returns nvarchar(4000) 
     as 
     begin 
    declare @BranchIds as nvarchar(4000) 
    set @BranchIds='' 
    if exists(select 1 from dbo.BranchEmployees where [email protected]) 
    begin 
     select @[email protected]+cast(BranchId as nvarchar(50)) 
         +',' from dbo.BranchEmployees where [email protected] 
         order by BranchId 
    end 
return @BranchIds 
     end 

任何人都可以让我知道如果功能我写在MYSQL中是否在ProperManner或不是?请帮助我。 谢谢。

回答

0

不通过它充分阅读,但很少评论

在MySQL变量赋值使用:=(在set @variable它是确定使用=,在select @variable:[email protected]+1

你是不是想

SELECT group_concat(BranchId) 
FROM dbo.BranchEmployees 
WHERE EmployeeId = @EmployeeId 

+0

其实我试图检索分配给特定员工的多个分支ID。他们在查询中存在问题吗?以其他任何方式获取他们...请让我知道 – SUSH 2010-12-17 09:56:07

+0

@SUSH,检查http://dev.mysql.com/doc/refman/5.0/en/group-by-functions .html#function_group-concat。这是MySQL的扩展,并为您提供所需的内容(逗号分隔的分配给特定员工的分支ID列表等),而不诉诸SP。完全不同的说明 - 您收到ID列表的事实表明您将在另一个查询中使用该列表。这通常不是正确的方法 - 你可以通过子查询和/或连接获得任何你会用IN获得的东西。 – Unreason 2010-12-17 11:39:59

+0

雅你说的是对的,我在视图中使用这个函数来检索多个分支,每个分支都以逗号分隔。 – SUSH 2010-12-20 07:05:56