Scripts

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 :

elfproef-sql-function
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
Nog geen reacties.