Jeg har opdaget, at du ikke kan have betingelser uden for den lagrede procedure i mysql. Dette er grunden til syntaksfejlen. Så snart jeg lagde den kode, jeg havde brug for mellem
BEGIN
SELECT MONTH(CURDATE()) INTO @curmonth;
SELECT MONTHNAME(CURDATE()) INTO @curmonthname;
SELECT DAY(LAST_DAY(CURDATE())) INTO @totaldays;
SELECT FIRST_DAY(CURDATE()) INTO @checkweekday;
SELECT DAY(@checkweekday) INTO @checkday;
SET @daycount = 0;
SET @workdays = 0;
WHILE(@daycount < @totaldays) DO
IF (WEEKDAY(@checkweekday) < 5) THEN
SET @workdays = @workdays+1;
END IF;
SET @daycount = @daycount+1;
SELECT ADDDATE(@checkweekday, INTERVAL 1 DAY) INTO @checkweekday;
END WHILE;
END
Kun for andre :
Hvis du ikke er sikker på, hvordan du opretter en rutine i phpmyadmin, kan du indsætte denne i SQL-forespørgslen
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
Kør forespørgslen. Dette vil oprette en lagret procedure eller lagret rutine ved navn test2. Gå nu til fanen rutiner og rediger den lagrede procedure, så den er den, du ønsker. Jeg foreslår også at læse http://net.tutsplus.com/ selvstudier/en-introduktion til-lagrede-procedurer/ hvis du begynder med lagrede procedurer.
Den første_dag-funktion, du har brug for, er:Hvordan får man den første dag i hver tilsvarende måned i mysql?
Visning af proceduren fungerer Du skal blot tilføje følgende linje under END WHILE og over END
SELECT @curmonth,@curmonthname,@totaldays,@daycount,@workdays,@checkweekday,@checkday;
Brug derefter følgende kode i SQL-forespørgselsvinduet.
call test2 /* or whatever you changed the name of the stored procedure to */
BEMÆRK: Hvis du bruger dette, skal du huske på, at denne kode ikke tager højde for nationalt overholdte helligdage (eller nogen helligdage for den sags skyld).