-- Funktionen um Orte zu verwalten -- -- [ create function "chk_ort" (text,varchar(10),int4) returns int4 as ' /* * chk_ort(ort, vorwahl_o, id_land) * * ueberpruefen ob der Ort schon in der DB gespeichert ist. * * returns: -1: falsche Parameter * -2: Inkonsistenz endeckt. Es existiert bereits ein * Ort mit dem einer, aber nicht alle der Parameter * übereinstimmen * 0: Ort existiert noch nicht in der DB * >0: Ort existiert bereits, gibt id_ort zurück. */ DECLARE ido adresse.ort%ROWTYPE; BEGIN IF $2 IS NULL OR $2 = '''' OR $3 IS NULL OR $3 < 1 THEN RETURN -1; END IF; -- -- OK, also zu jeder Kombination (vorwahl_o und id_land) kann -- es nur einen Ort geben. -- select INTO ido * from adresse.ort where vorwahl_o = $2 and id_land = $3; IF NOT FOUND THEN RETURN 0; ELSE IF ido.ort <> $1 THEN RETURN -1; END IF; END IF; RETURN ido._id_; END; ' language 'plpgsql'; create function "ins_ort" (text,varchar(10),int4) returns int4 as ' /* * ins_land(ort, vorwahl_o, id_land) * * fügt einen Ort in die DB ein sofern es nicht schon existiert, * Inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast * sind. * * returns: 0: wenn der Ort nicht eingefuegt werden kann * >0: wenn der Ort eingefuegt werden konnte oder bereits * existierte, gibt id_ort zurück. */ DECLARE id_ort adresse.ort._id_%TYPE; BEGIN select INTO id_ort adresse.chk_ort($1, $2, $3); IF id_ort = -1 THEN RETURN 0; ELSE IF id_ort = 0 THEN insert into adresse.ort (ort, vorwahl_o, id_land) values ($1, $2, $3); select INTO id_ort adresse.chk_ort($1, $2, $3); END IF; END IF; RETURN id_ort; END; ' language 'plpgsql'; create function "id_ort" (varchar(10),int4) returns int4 as ' /* * get_id_ort_by_ukey1(vorwahl_o, id_land) * * Ermittelt die id (id_ort) eines in der DB enthaltenen Orts * 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 ido adresse.ort._id_%TYPE; BEGIN select INTO ido adresse.chk_ort(NULL, $1, $2); RETURN ido; END; ' language 'plpgsql'; -- ] -- Ende Orte --