cr_func_ort.sql
2.99 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
-- 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 --