Some SQL targeted at PostgreSQL. This was intended as the database backend for user management in an online shop system.
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.
 
 
 

99 lines
2.5 KiB

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