-- Funktionen um Adressen zu verwalten -- -- [ create function "chk_adresse" (text,varchar(5),varchar(10),int4,int4) returns int4 as ' /* * chk_adresse(strasse, h_nr, plz_a, id_ort, id_land) * * ueberpruefen ob die Adresse schon in der DB gespeichert ist. * * returns: -1: falsche Parameter * -2: Inkonsistenz endeckt. Es existiert bereits eine * Adresse mit dem einer, aber nicht alle der Parameter * übereinstimmen * 0: Adresse existiert noch nicht in der DB * >0: Adresse existiert bereits, gibt id_adresse zurück. */ DECLARE ida adresse.adresse%ROWTYPE; BEGIN IF $1 IS NULL OR $1 = '''' OR $2 IS NULL OR $2 = '''' OR $3 IS NULL OR $3 = '''' THEN RETURN -1; END IF; select INTO ida * from adresse.adresse where strasse = $1 and plz_a = $3 and id_land = $5; IF NOT FOUND THEN RETURN 0; ELSE IF ida.h_nr <> $2 OR ida.id_ort <> $4 THEN RETURN -2; END IF; END IF; RETURN ida._id_; END; ' language 'plpgsql'; create function "ins_adresse" (text,varchar(5),varchar(10),int4,int4) returns int4 as ' /* * ins_adresse(strasse, h_nr, plz_a, id_ort, id_land) * * fügt eine Adresse in die DB ein sofern es nicht schon existiert, * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast * sind. * * returns: 0: wenn die Adresse nicht eingefuegt werden kann * >0: wenn die Adresse eingefuegt werden konnte oder bereits * existierte, gibt id_adresse zurück. */ DECLARE id_adresse adresse.adresse._id_%TYPE; BEGIN select INTO id_adresse adresse.chk_adresse($1, $2, $3, $4, $5); IF id_adresse = -1 THEN RETURN 0; ELSE IF id_adresse = 0 THEN insert into adresse.adresse (strasse,h_nr,plz_a, id_ort,id_land) values ($1, $2, $3, $4, $5); select INTO id_adresse adresse.chk_adresse($1,$2,$3,$4,$5); END IF; END IF; RETURN id_adresse; END; ' language 'plpgsql'; create function "id_adresse" (text,varchar(5),varchar(10),int4) returns int4 as ' /* * id_adresse(strasse, h_nr, plz_a, id_land) * * Ermittelt die id (id_adresse) einer in der DB enthaltenen Adresse * anhand des Primaerschluessels (vorwahl_o, id_land) * * returns: 0: wenn das Land nicht eingefuegt werden kann * >0: wenn das Land gefunden wurde, gibt id_land zurück. */ DECLARE ida adresse.adresse._id_%TYPE; BEGIN select INTO ida _id_ from adresse.adresse where strasse = $1 and h_nr = $2 and plz_a = $3 and id_land = $4; IF NOT FOUND THEN RETURN 0; ELSE RETURN ida; END IF; END; ' language 'plpgsql'; -- ] -- Ende Adressen --