2016-07-28 36 views
0
CREATE DEFINER=`root`@`localhost` PROCEDURE `apply_Leave_SP`(
in leavetypeid int , 
in empid int, 
in reason varchar(100), 
in startdate date, 
in enddate date, 
in startsession int, 
in endsession int, 
in compoffid int, 
in mangerid int 

) 
BEGIN 

declare leavestatus int(10) default 0; 
declare optionalyHolidays int(10) default 0; 
declare listofholidays int(10) default 0; 
declare totalhours int (10) default 0; 
declare hours int (10) default 0; 
declare satsun int (10) default 0; 
declare manger_id int(10) default 0; 
declare paidleave int(10) default 0; 
declare days int(10) default 0; 
declare leaveappliedid int(10) default 0; 
declare lossofpay int(10) default 0; 
declare casualleave int (10) default 0; 
declare sickleave int (10) default 0; 


    select count(holiday_id) into optionalyHolidays from Parabola.holidays where holiday_type_id=2 and 
          DATEDIFF(startdate,curdate())>=20; 

    select count(*) into listofholidays from Parabola.holidays where date between startdate and enddate;      

SELECT 
COUNT(*) AS total into hours 
FROM 
( SELECT ADDDATE(startdate, INTERVAL @i:[email protected]+1 DAY) AS DAY 
    FROM (
     SELECT a.a 
     FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a 
     CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b 
     CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c 
    ) a 
    JOIN (SELECT @i := -1) r1 
    WHERE 
    @i < DATEDIFF(enddate, startdate) 

) AS dateTable 
WHERE WEEKDAY(dateTable.Day) IN (5,6); 

     SELECT datediff(enddate,startdate) into totalhours; 
     set hours=(totalhours-listofholidays-satsun)*8; 


    if(leavetypeid=1)then 
    set leavestatus=5; 
    else 
     set leavestatus=1; 
     end if;  

     if(optionalyHolidays>=0) then 
     set leavestatus=5; 
     end if; 

insert into leave_applied(leave_type_id,hours,employee_id, 
created_at,updated_at,start_date,end_date,start_date_session, 
end_date_session,reason, 
status,reminder_count,personal_calendar_event_id,system_calendar_event_id) 

values(leavetypeid,hours,empid,curdate(),curdate(),startdate,enddate, 
startsession,endsession, 
reason,leavestatus,1,'sdasdas','sadeew'); 



Select LAST_INSERT_ID() into leaveappliedid ; 


     if((leaveappliedid=1 or 4) and days >paidleave) then 
      set lossofpay=days-paidleave; 


     else if((leaveappliedid=1 or 4) and days> @CL) then 
      set [email protected]; 
      set [email protected]; 


     else  if((leaveappliedid=1 or 4) and days>@SL) then 
      set [email protected]; 
      set [email protected]; 

      else 
      set mangerid=10; 

      end if; 

     end; 

    insert into leave_actual (leave_applied_id, 
    leave_type_id,hours,start_date, 
    end_date,created_at,updated_at) values(leaveappliedid,leavetypeid, 
    hours,start_date,end_date,curdate(),curdate());  


insert into leave_approval (leave_applied_id, 
     manager_id,status ,created_at,updated_at) values 
     (leaveappliedid,mangerid,leavestatus,curdate(),curdate()); 

    END 

這是我的代碼時,我嘗試應用否則,如果條件再有就是同時只能如果沒有錯誤來了語法錯誤來了,但我必須適用否則,如果條件請建議我哪裏做錯了,它表明否則,如果條件如何應用if和else if conditon在MySQL存儲過程

回答

-1

,如果語法,否則,如果是這樣的:

IF condition THEN 
    ... ... 
ELSEIF condition THEN 
    ... ... 
END IF; 

manual這裏。

IF search_condition THEN statement_list 
    [ELSEIF search_condition THEN statement_list] ... 
    [ELSE statement_list] 
END IF 
+0

我已經試過相同,但在隨後的最後一行到底有錯誤來顯示它的語法錯誤缺少IF –

+0

@ResearchDevelopment對不起,我已經錯過了'IF',更新它,再次檢查請。 – Blank

+0

http://paste.ofcode.org/PaM93CQhPXTvxKFcvPzHpx我也做過同樣的事情,如果 –