CREATE OR REPLACE FUNCTION check_phone_number(text) RETURNS boolean AS $$ BEGIN IF NOT $1 ~ e'^\\+45\\ \\d{4}\\ \\d{4}$' THEN RAISE EXCEPTION 'Wrong formated string "%". Expected format is +45 XXXX XXXX', $1; END IF; RETURN true; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION generate_string(integer) RETURNS SETOF varchar AS $$ BEGIN FOR _i IN 1 .. $1 LOOP RETURN NEXT 'Slides for Lecture #'||_i||''; END LOOP; RETURN; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION html_li_aggr (state text,p text) RETURNS text AS $$ BEGIN IF p IS NULL THEN RETURN state; ELSE RETURN state || '
  • ' || p || E'
  • \n'; END IF; END; $$ LANGUAGE plpgsql IMMUTABLE; CREATE OR REPLACE FUNCTION html_ul_final (state text) RETURNS text AS $$ BEGIN IF $1 <> '' THEN RETURN E''; ELSE RETURN ''; END IF; END; $$ LANGUAGE plpgsql IMMUTABLE; DROP AGGREGATE html_ul (text); CREATE AGGREGATE html_ul ( basetype = text, sfunc = html_li_aggr, stype = text, initcond = '', finalfunc = html_ul_final ); CREATE OR REPLACE FUNCTION tabsin(x float) RETURNS float AS $$ DECLARE sinx float; BEGIN IF NOT EXISTS(SELECT relname FROM pg_class WHERE relname = 'tabsin' AND relkind = 'r' AND pg_table_is_visible(oid)) THEN RAISE NOTICE 'Create table tabsin'; CREATE TEMP TABLE tabsin (val NUMERIC PRIMARY KEY, sine NUMERIC); END IF; SELECT INTO sinx sine FROM tabsin WHERE val = x; IF sinx IS NULL THEN sinx := SIN(x); INSERT INTO tabsin VALUES (x, sinx); END IF; RETURN sinx; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION fib(n int) RETURNS int AS $$ BEGIN IF n < 2 THEN RETURN N; END IF; RETURN tabfib(n-1) + tabfib(n-2); END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION tabfib(n int) RETURNS int AS $$ DECLARE fibn int; BEGIN IF NOT EXISTS(SELECT relname FROM pg_class WHERE relname = 'tabfib' AND relkind = 'r' AND pg_table_is_visible(oid)) THEN RAISE NOTICE 'Create table tabfib'; CREATE TEMP TABLE tabfib (val NUMERIC PRIMARY KEY, fib NUMERIC); END IF; SELECT INTO fibn fib FROM tabfib WHERE val = n; IF fibn IS NULL THEN fibn := fib(n); INSERT INTO tabfib VALUES (n, fibn); END IF; RETURN fibn; END; $$ LANGUAGE plpgsql;