cr_func_adresse.sql
3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
-- 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 --