2011-01-13 3 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$$ 

Das Problem ist, das geben Fehler in Zeile:Ausgabe in dem Hinzufügen von zwei Ausgaben von MySQL-Funktion innerhalb einer anderen Funktion

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

Dies ist der Fehler:

Fehlercode: 1064 Sie haben ein Fehler in Ihre SQL-Syntax; Überprüfen Sie das Handbuch, das entspricht Ihrem MySQL-Server Version für die richtige Syntax zu verwenden in der Nähe '; Arbeit verlassen; Ende wenn;

set TotalCostOfEmployees = TotalCostOfEmploy' at line 12 

Antwort

0

Verwenden Sie die SELECT ... INTO Klausel

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

hey thanks .. die mir geholfen .... ich ein Neuling in mysql sein .... so einen Fehler gemacht :) – Joy

+0

@Joy np. Bitte denken Sie daran, die Antwort auf Ihre Frage zu akzeptieren :-) –

+0

Entschuldigung, ich schätze, ich habe ein anderes Problem hier gepostet ich bin in einem falschen Abschnitt konfrontiert können Sie bitte nach tht? – Joy

0

ich es über diese Art und Weise gelöst:

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

Warum sind Sie dafür überhaupt einen Cursor zu verwenden?

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 
Verwandte Themen