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;