Creating function to extract data from views, whose name prefix is passed as function parameter:
CREATE FUNCTION t (char(2)) RETURNS text AS $$
DECLARE view_name TEXT;
BEGIN
view_name := CONCAT($1, '_any_text');
RETURN view_name;
END;
$$ LANGUAGE plpgsql;
Works as expected, returns text string 'prefix_any_text', until I add some text to function body:
CREATE FUNCTION t (char(2)) RETURNS text AS $$
DECLARE view_name TEXT;
BEGIN
view_name := CONCAT($1, '_any_text');
CREATE TEMP TABLE t1 AS
SELECT any_column FROM view_name;
RETURN view_name;
END;
$$ LANGUAGE plpgsql;
When trying to execute create (replace) I get:
SQL Error [42P01]: ERROR: relation "view_name" does not exist
Where: PL/pgSQL function t(character) line # at SQL statement
Note that output was not changed. Same error persist, if developing function further, it have to return something from temporary table (having changed RETURNS respectively).