2010-12-16 11 views
1

MYSQLで作業しているので、ストアドプロシージャとビューを実行する必要がありますが、関数から返された値を取得する際に問題が発生しました。 がここに関数の:mysql関数から返された値を取得することができません

 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 

 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ファンクションコードです

誰でも私がMYSQLで書いた機能がProperMannerであるかどうか教えてください。私を助けてください。 ありがとうございます。

答えて

0

set @variableで、select @variable:[email protected]+1で、=を使用しても大丈夫です)それを介して、完全に読みますが、MySQLではいくつかのコメント

変数割り当ては:=を使用していない、あなたは

SELECT group_concat(BranchId) 
FROM dbo.BranchEmployees 
WHERE EmployeeId = @EmployeeId 
しようとしています

+0

実際に、特定の従業員に割り当てられた複数のbranchIdsを取得しようとしています。クエリに問題はありますか?それを取得する他の方法は...私に教えてください – SUSH

+0

@SUSH、http://dev.mysql.com/doc/refman/5.0/ja/group-by-functionsを調べてください.html#function_group-concat。これはmysqlの拡張であり、必要なもの(特定の従業員に割り当てられたブランチIDのカンマ区切りリストなど)をSPに頼らずに提供します。完全に異なる注釈 - あなたがIDのリストを取得しているという事実は、別のクエリでそれを使用することを示唆しています。これは通常、適切な方法ではありません。サブクエリや結合を使用してINを使用して取得できるものはすべて取得できます。 – Unreason

+0

あなたが言ったことは正しいことです。この関数をビューで使用して、カンマで区切られた複数のブランチを取得しています。 – SUSH

関連する問題