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.
101 lines
3.0 KiB
101 lines
3.0 KiB
-- 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 --
|