Elfproef SQL function
Ik moest vandaag voor school de elfproef maken voor SQL server en ik dacht ik vorm 'm even om voor MySQL misschien dat iemand er iets aan heeft. Er komen wel een aantal opmerkingen bij: Als je niet weet wat de elfproef is: http://nl.wikipedia.org/wiki/Elfproef Er wordt alleen naar de elfproef gekeken, niet of de lengte wel juist is, 19 wordt dus ook als geschikt gezien. Deze toevoeging mag je eventueel zelf doen. Er kwam meteen een leuke extra (*kuch*) van MySQL boven drijven, ook al define je het datatype INT krijg je als nog een komma getal en dus moest ik de FLOOR functie gebruiken. Het gebruik van deze functie is het gemakkelijkste in een CHECK constraint, maar helaas wordt deze niet door MySQL ondersteun en zal je dus een andere oplossing moeten verzinnen. Voorbeelden Bij de uitkomst 1 (TRUE) is de elfproef geslaagd. Een voorbeeld van het gebruik in MySQL : Een voorbeeld van het gebruik icm een CHECK constraint in SQL Server : Een voorbeeld van het gebruik icm een CHECK constraint in Postgre :
In MySQL:
[code]
CREATE FUNCTION fnElfProef (accountNr INT)
RETURNS BOOLEAN
BEGIN
DECLARE i, totaal INT DEFAULT 0;
WHILE i < 9 DO
SET i = i+1;
SET totaal = totaal+(i*(accountNr%10));
SET accountNr = FLOOR(accountNr/10);
END WHILE;
RETURN (totaal%11) = 0;
END
[/code]
In SQL Server:
[code]
CREATE FUNCTION fnElfProef (@accountNr INT)
RETURNS BIT
AS
BEGIN
DECLARE @i INT
SELECT @i = 0
DECLARE @total INT
SELECT @total = 0
WHILE @i < 9 BEGIN
SELECT @i = @i+1
SELECT @total = @total+(@i*(@accountNr%10))
SELECT @accountNr = @accountNr/10
END
IF (@total%11) = 0 BEGIN
RETURN 1
END
RETURN 0
END
[/code]
Ook nog maar voor Postgre:
[code]CREATE OR REPLACE FUNCTION fnElfProef (accountNrIn INT)
RETURNS BOOLEAN
AS
$function$
DECLARE i INT; total INT; accountNr INT;
BEGIN
accountNr := accountNrIn;
i := 0;
total := 0;
WHILE i < 9 LOOP
i := i+1;
total := total+(i*(accountNr%10));
accountNr := accountNr/10;
END LOOP;
RETURN (total%11) = 0;
END
$function$ LANGUAGE plpgsql;[/code]
Reacties
0