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$$

問題は、次の行でエラーが発生することです。

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

これはエラーです:

エラーコード:1064SQL構文にエラーがあります。'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。emploopを離れます。終了する場合;

  set TotalCostOfEmployees = TotalCostOfEmploy' at line 12
4

3 に答える 3

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
于 2011-01-14T11:20:06.180 に答える
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$$
于 2011-01-14T11:14:26.743 に答える
0

SELECT ... INTO句を使用する

SELECT TotalCostOfEmployees + ( F_TotalManDaysPerEmployee(e_id,id)*(F_GetEmployeeGradeSal(e_id))
INTO TotalCostOfEmployees;
于 2011-01-13T18:10:00.407 に答える