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