-- allgemeine Funktionen zu Waren/Warengruppen -- -- [ create function produkt_typ_len() returns int4 as ' DECLARE len int4; BEGIN select INTO len bit_length(produkt_typ) from waren.produkt_typen; IF NOT FOUND THEN len := 0; END IF; RETURN len; END; ' language 'plpgsql'; create function produkt_typ(text, int4) returns bit varying as ' /* * produkt_typ(name, len) * * ermittelt den produkt_typ zu einem entsprechenden namen. * * returns: NULL: falls der name nicht in konten_typen existiert * >0: der konten_typ zu dem namen */ DECLARE row waren.produkt_typen%ROWTYPE; min_len int4 := waren.produkt_typ_len(); sel text; BEGIN IF $2 < min_len THEN RAISE EXCEPTION ''len is to short''; END IF; sel := ''select produkt_typ::BIT('' || $2 || '')>>'' || $2-min_len || '' from waren.produkt_typen where bezeichnung='' || quote_literal($1); FOR row IN EXECUTE sel LOOP END LOOP; IF NOT FOUND THEN RETURN NULL; ELSE RETURN row.konto_typ; END IF; END; ' language 'plpgsql'; create function get_warengruppe(text) returns warengruppe as ' DECLARE row waren.warengruppe%ROWTYPE; BEGIN select INTO row * from waren.warengruppe where name=$1; IF NOT FOUND THEN RETURN NULL; ELSE RETURN row; END IF; END; ' language 'plpgsql'; create function get_warengruppe(int4) returns warengruppe as ' DECLARE row waren.warengruppe%ROWTYPE; BEGIN select INTO row * from waren.warengruppe where _id_=$1; IF NOT FOUND THEN RETURN NULL; ELSE RETURN row; END IF; END; ' language 'plpgsql'; create function warengruppe_id(text) returns int4 as ' DECLARE row waren.warengruppe%ROWTYPE; BEGIN select INTO row * from waren.warengruppe where name=$1; IF NOT FOUND THEN RETURN NULL; ELSE RETURN row._id_; END IF; END; ' language 'plpgsql'; -- ] -- Ende allgemeine Funktionen zu Waren/Warengruppen --