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.
308 lines
9.5 KiB
308 lines
9.5 KiB
-- Funktionen um Arbeitsplaetze zu verwalten --
|
|
-- [
|
|
create function "chk_arbeit" (text,text,numeric(10,2),int4,int4)
|
|
returns int4 as '
|
|
/*
|
|
* chk_arbeit(position, beschreibung, gehalt, id_person, id_abteilung)
|
|
*
|
|
* ueberpruefen ob eine passender Stelle 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 firma.arbeit%ROWTYPE;
|
|
BEGIN
|
|
IF $4 IS NULL OR $4 < 1 OR
|
|
$5 IS NULL OR $5 < 1 OR
|
|
$1 IS NULL OR $1 = '''' THEN
|
|
RETURN -1;
|
|
END IF;
|
|
|
|
select INTO ida * from firma.arbeit where
|
|
id_person = $4 and id_abteilung = $5;
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN 0;
|
|
ELSE
|
|
IF ida.position <> $1 OR ida.beschreibung <> $2 OR
|
|
ida.gehalt <> $3 THEN
|
|
RETURN -2;
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN 1;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "ins_arbeit" (text,text,numeric(10,2),int4,int4)
|
|
returns int4 as '
|
|
/*
|
|
* ins_arbeit(position, beschreibung, gehalt, id_person, id_abteilung)
|
|
*
|
|
* fügt eine Stelle 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
|
|
chk int4;
|
|
BEGIN
|
|
select INTO chk firma.chk_arbeit($1, $2, $3, $4, $5);
|
|
|
|
IF chk = 0 THEN
|
|
insert into firma.arbeit (position, beschreibung, gehalt,
|
|
id_person, id_abteilung)
|
|
values ($1, $2, $3, $4, $5);
|
|
|
|
RETURN 1;
|
|
END IF;
|
|
|
|
RETURN 0;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "chk_firma" (text, text, varchar(10))
|
|
returns int4 as '
|
|
/*
|
|
* chk_firma(name, beschreibung, plz_f)
|
|
*
|
|
* ueberpruefen ob die Firma 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
|
|
* übereinstimmen
|
|
* 0: Land existiert noch nicht in der DB
|
|
* >0: Land existiert bereits, gibt id_land zurück.
|
|
*/
|
|
|
|
DECLARE
|
|
idf firma.firma%ROWTYPE;
|
|
BEGIN
|
|
IF $1 IS NULL OR $1 = '''' THEN
|
|
return -1;
|
|
END IF;
|
|
|
|
IF $3 IS NOT NULL THEN
|
|
select INTO idf * from firma.firma where
|
|
name = $1 and plz_f = $3;
|
|
ELSE
|
|
select INTO idf * from firma.firma where
|
|
name = $1;
|
|
END IF;
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN 0;
|
|
ELSE
|
|
IF idf.beschreibung <> $2 THEN
|
|
RETURN -2;
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN idf._id_;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "ins_firma" (text, text, varchar(10), int4)
|
|
returns int4 as '
|
|
/*
|
|
* ins_firma(name, beschreibung, plz_f, id_adresse)
|
|
*
|
|
* fügt eine Firma in die DB ein sofern es nicht schon existiert,
|
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast
|
|
* sind.
|
|
* Ausserdem wir die globale Abteilung zu der Firma angelegt, siehe
|
|
* cr_tables.sql
|
|
*
|
|
* returns: 0: wenn die Firma nicht eingefuegt werden kann
|
|
* >0: wenn die Firma eingefuegt werden konnte oder bereits
|
|
* existierte, gibt id_firma zurück.
|
|
*/
|
|
|
|
DECLARE
|
|
idf firma.firma._id_%TYPE;
|
|
BEGIN
|
|
select INTO idf firma.chk_firma($1, $2, $3);
|
|
|
|
IF idf < 0 THEN
|
|
RETURN 0;
|
|
ELSE
|
|
IF idf = 0 THEN
|
|
insert into firma.firma (name, beschreibung, plz_f)
|
|
values ($1, $2, $3);
|
|
|
|
select INTO idf firma.chk_firma($1, $2, $3);
|
|
|
|
PERFORM firma.ins_abteilung(''_FIRMA_'', $2, idf, $4);
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN idf;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "id_abteilung" (text, int4)
|
|
returns int4 as '
|
|
/*
|
|
* id_abteilung(bezeichnung, id_firma);
|
|
* gibt die id_abteilung einer bestimmten Abteilung einer
|
|
* bestimmten Firma aus.
|
|
*
|
|
* returns: 0: wenn keine passnede Abteilung existiert
|
|
* >0: die Abteilung (id_abteilung)
|
|
*/
|
|
|
|
DECLARE
|
|
ida firma.abteilung._id_%TYPE;
|
|
BEGIN
|
|
select INTO ida _id_ from firma.abteilung where
|
|
id_firma = $2 and bezeichnung = $1;
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN 0;
|
|
ELSE
|
|
RETURN ida;
|
|
END IF;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "id_firma" (text,varchar(10))
|
|
returns int4 as '
|
|
/*
|
|
* id_firma(name, plz_f);
|
|
* gibt die id_abteilung der zentralen Abteilung einer Firma aus
|
|
* siehe dazu auch cr_tables.sql
|
|
*
|
|
* returns: 0: wenn keine passende Firma existiert
|
|
* >0: die Firma (id_firma)
|
|
*/
|
|
|
|
DECLARE
|
|
idf firma.firma._id_%TYPE;
|
|
BEGIN
|
|
IF $2 IS NOT NULL THEN
|
|
select INTO idf _id_ from firma.firma where
|
|
name = $1 and plz_f = $2;
|
|
ELSE
|
|
select INTO idf _id_ from firma.firma where
|
|
name = $1;
|
|
END IF;
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN 0;
|
|
ELSE
|
|
RETURN idf;
|
|
END IF;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "id_abteilung_firma" (int4)
|
|
returns int4 as '
|
|
/*
|
|
* id_abteilung_firma(id_firma);
|
|
* gibt die id_abteilung der zentralen Abteilung einer Firma aus
|
|
* siehe dazu auch cr_tables.sql
|
|
*
|
|
* returns: 0: wenn keine Firma zu dieser id_firma existiert
|
|
* >0: die Abteilung zu der Firma (id_abteilung)
|
|
*/
|
|
|
|
DECLARE
|
|
ida firma.abteilung._id_%TYPE;
|
|
BEGIN
|
|
select INTO ida _id_ from firma.abteilung where
|
|
id_firma = $1 and bezeichnung = ''_FIRMA_'';
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN 0;
|
|
ELSE
|
|
RETURN ida;
|
|
END IF;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "chk_abteilung" (text, text, int4, int4)
|
|
returns int4 as '
|
|
/*
|
|
* chk_abteilung(bezeichnung, beschreibung, id_firma, id_adresse)
|
|
*
|
|
* ueberpruefen ob die Abteilung 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
|
|
* übereinstimmen
|
|
* 0: Land existiert noch nicht in der DB
|
|
* >0: Land existiert bereits, gibt id_land zurück.
|
|
*/
|
|
|
|
DECLARE
|
|
ida firma.abteilung%ROWTYPE;
|
|
BEGIN
|
|
IF $1 IS NULL OR $1 = '''' OR
|
|
$3 IS NULL OR $3 < 1 THEN
|
|
RETURN -1;
|
|
END IF;
|
|
|
|
select INTO ida * from firma.abteilung where
|
|
bezeichnung = $1 and id_firma = $3;
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN 0;
|
|
ELSE
|
|
IF ida.beschreibung <> $2 OR
|
|
ida.id_adresse <> $4 THEN
|
|
RETURN -2;
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN ida._id_;
|
|
END;
|
|
' language 'plpgsql';
|
|
|
|
create function "ins_abteilung" (text, text, int4, int4)
|
|
returns int4 as '
|
|
/*
|
|
* ins_abteilung(bezeichnung, beschreibung, id_firma, id_adresse)
|
|
*
|
|
* fügt eine Abteilung in die DB ein sofern es nicht schon existiert,
|
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast
|
|
* sind.
|
|
*
|
|
* returns: 0: wenn die Abteilung nicht eingefuegt werden kann
|
|
* >0: wenn die Abteilung eingefuegt werden konnte oder bereits
|
|
* existierte, gibt id_firma zurück.
|
|
*/
|
|
|
|
DECLARE
|
|
ida firma.abteilung._id_%TYPE;
|
|
BEGIN
|
|
select INTO ida firma.chk_abteilung($1, $2, $3, $4);
|
|
|
|
IF ida = -1 THEN
|
|
RETURN 0;
|
|
ELSE
|
|
IF ida = 0 THEN
|
|
insert into firma.abteilung (bezeichnung, beschreibung,
|
|
id_firma, id_adresse)
|
|
values ($1, $2, $3, $4);
|
|
|
|
select INTO ida firma.chk_abteilung($1, $2, $3, $4);
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN ida;
|
|
END;
|
|
' language 'plpgsql';
|
|
-- ]
|
|
-- Ende Arbeitsplatz --
|