2011-01-13 11 views
2
CREATE DEFINER=`root`@`localhost` FUNCTION `F_GetProjectCostPerEmployeeInProject`(id VARCHAR(20)) RETURNS DECIMAL(30,2) 
BEGIN 
    DECLARE e_id VARCHAR(20); 
    DECLARE finished INT ; 
    DECLARE temp DECIMAL(30,2); 
    DECLARE temp2 DECIMAL(30,2); 
    DECLARE TotalCostOfEmployees DECIMAL(30,2); 
    DECLARE cur CURSOR FOR SELECT DISTINCT e_id FROM project_employee WHERE project_id=id; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; 
    emploop : LOOP 
     FETCH cur INTO e_id; 
     IF finished =1 ; 
      LEAVE emploop; 
     END IF ; 

     SET TotalCostOfEmployees = TotalCostOfEmployees + (F_TotalManDaysPerEmployee(e_id,id)*(F_GetEmployeeGradeSal(e_id)); 
    END LOOP emploop; 
    RETURN TotalCostOfEmployees; 
    END$$ 

を2つの出力を追加することで問題はラインでその与えるエラーです:問題は別の関数内のMySQL関数から

SET TotalCostOfEmployees = TotalCostOfEmployees + (F_TotalManDaysPerEmployee(e_id,id)*(F_GetEmployeeGradeSal(e_id)); 

これはエラーです:

エラーコード:1064あなたが持っています のSQL構文にエラーがあります。 がMySQLサーバーの バージョンに対応していることを確認し、適切な構文で を使用してください。 '; emploopを残す。終了する。

set TotalCostOfEmployees = TotalCostOfEmploy' at line 12 

答えて

0

SELECT ... INTO

SELECT TotalCostOfEmployees + (F_TotalManDaysPerEmployee(e_id,id)*(F_GetEmployeeGradeSal(e_id)) 
INTO TotalCostOfEmployees; 
+0

ちょっとは感謝..それはとてもミスを犯した:) – Joy

+0

@JoyのNPが....私はMySQLでの初心者であること....私を助けました。あなたの質問への答えを受け入れることを忘れないでください:-) –

+0

申し訳ありません私はここに私の間違ったセクションに直面して私の別の問題を投稿したと思いますthtを見てください? – Joy

0

を使用して、私はこの方法を経由して、それを解決:

enter code BEGIN DECLARE e_id VARCHAR(20); 
DECLARE finished INT ; 
DECLARE salary DECIMAL(30,2);  
DECLARE TotalCostOfEmployees DECIMAL(30,2) ; 
DECLARE cur CURSOR FOR SELECT DISTINCT Emp_code FROM project_employee WHERE project_id=p_id; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; 
SET finished = 0; 
OPEN cur; 
SET TotalCostOfEmployees =0.0; 
emploop : LOOP 
    FETCH cur INTO e_id; 
    IF finished = 1 THEN 
     LEAVE emploop; 
    END IF ; 
    SELECT COALESCE((F_TotalManDaysPerEmployee(e_id,p_id)* F_GetEmployeeGradeSal(e_id))/22,0.0) 
      INTO salary; 
    SET TotalCostOfEmployees = TotalCostOfEmployees + salary; 
    /*SELECT (TotalCostOfEmployees + ifnull(salary,0.0)) into TotalCostOfEmployees; */ 

END LOOP emploop; 
CLOSE cur; 
RETURN TotalCostOfEmployees; 
END$$ 
0

は、なぜあなたは、このすべてのカーソルを使用していますか?

SELECT SUM(F_TotalManDaysPerEmployee(e_id, id) * F_GetEmployeeGradeSal(e_id)) AS TotalCostOfEmployees 
FROM (
     SELECT DISTINCT e_id 
     FROM project_employee 
     WHERE project_id = id 
     ) q 
関連する問題