You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.4 KiB
104 lines
3.4 KiB
-- 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 --
|