2010-12-16 26 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