Some SQL targeted at PostgreSQL. This was intended as the database backend for user management in an online shop system.
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

-- 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 --