cr_func_land.sql
4.87 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
-- Funktionen um Laender zu verwalten --
-- [
create function "chk_land" (text,varchar(3),varchar(4))
returns int4 as '
/*
* chk_land(land, lnd_kz, vorwahl_l)
*
* ueberpruefen ob das Land schon in der DB gespeichert ist.
*
* returns: -1: falsche Parameter
* -2: Inkonsistenz endeckt. Es existiert bereits ein
* Land mit dem einer, aber nicht alle der Parameter
* uebereinstimmen
* 0: Land existiert noch nicht in der DB
* >0: Land existiert bereits, gibt id_land zurueck.
*/
DECLARE
idl adresse.land%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;
/*
* Jeder der Teile is unique, existiert also einer der Teile
* schon aber mit anderen Partnern dann is ein Fehler aufgetreten.
*/
select INTO idl * from adresse.land where
land = $1 or
lnd_kz = $2 or
vorwahl_l = $3;
IF NOT FOUND THEN
RETURN 0;
ELSE
IF idl.land <> $1 OR idl.lnd_kz <> $2 OR
idl.vorwahl_l <> $3 THEN
RETURN -2;
END IF;
END IF;
RETURN idl._id_;
END;
' language 'plpgsql';
create function "ins_land" (text,varchar(3),varchar(4))
returns int4 as '
/*
* ins_land(land, lnd_kz, vorwahl_l)
*
* fuegt ein Land in die DB ein sofern es nicht schon existiert,
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast
* sind.
*
* returns: 0: wenn das Land nicht eingefuegt werden kann
* >0: wenn das Land eingefuegt werden konnte oder bereits
* existierte, gibt id_land zurueck.
*/
DECLARE
id_land adresse.land._id_%TYPE;
BEGIN
/*
* Daten ueberpruefen (siehe chk_land)
*/
select INTO id_land adresse.chk_land($1, $2, $3);
IF id_land < 0 THEN
RETURN 0;
ELSE
IF id_land = 0 THEN
insert into adresse.land (land, lnd_kz, vorwahl_l)
values ($1, $2, $3);
select INTO id_land adresse.chk_land($1, $2, $3);
END IF;
END IF;
RETURN id_land;
END;
' language 'plpgsql';
create function "id_land_by_land" (text)
returns int4 as '
/*
* get_id_land_by_land(land)
*
* Ermittelt die id (id_land) eines in der DB enthaltenen Landes
* anhand seiner Bezeuchnung (land.land)
*
* returns: 0: wenn das Land nicht eingefuegt werden kann
* >0: wenn das Land gefunden wurde, gibt id_land zurueck.
*/
DECLARE
idl adresse.land._id_%TYPE;
BEGIN
select INTO idl _id_ from adresse.land where
land = $1;
IF NOT FOUND THEN
RETURN 0;
ELSE
RETURN idl;
END IF;
END;
' language 'plpgsql';
create function "id_land_by_lnd_kz" (varchar(3))
returns int4 as '
/*
* get_id_land_by_lnd_kz(lnd_kz)
*
* Ermittelt die id (id_land) eines in der DB enthaltenen Landes
* anhand des internationalen Kennzeichens (land.lnd_kz)
*
* returns: 0: wenn das Land nicht eingefuegt werden kann
* >0: wenn das Land gefunden wurde, gibt id_land zurueck.
*/
DECLARE
idl adresse.land._id_%TYPE;
BEGIN
select INTO idl _id_ from adresse.land where
lnd_kz = $1;
IF NOT FOUND THEN
RETURN 0;
ELSE
RETURN idl;
END IF;
END;
' language 'plpgsql';
create function "id_land_by_vorwahl_l" (varchar(4))
returns int4 as '
/*
* get_id_land_by_vorwahl_l(vorwahl_l)
*
* Ermittelt die id (id_land) eines in der DB enthaltenen Landes
* anhand die internationalen Laendervorwahl (land.land_kz)
*
* returns: 0: wenn das Land nicht eingefuegt werden kann
* >0: wenn das Land gefunden wurde, gibt id_land zurueck.
*/
DECLARE
idl adresse.land._id_%TYPE;
BEGIN
select INTO idl _id_ from adresse.land where
vorwahl_l = $1;
IF NOT FOUND THEN
RETURN 0;
ELSE
RETURN idl;
END IF;
END;
' language 'plpgsql';
-- ]
-- Ende Laender --