I have a function with the following "signature":
CREATE OR REPLACE FUNCTION iterate_test()
RETURNS text
LANGUAGE plpgsql
...
That returns a query in text form:
SELECT DISTINCT(t1.date) AS date, AMD.adjusted_close AS AMD, GME.adjusted_close AS GME FROM clean_daily AS t1 INNER JOIN clean_daily AS AMD ON t1.date=AMD.date AND AMD.ticker='AMD' INNER JOIN clean_daily AS GME ON AMD.date=GME.date AND GME.ticker='GME' ORDER BY t1.date DESC;
How can I execute this string as a query? I have tried EXECUTE like this:
EXECUTE iterate_test();
EXECUTE QUERY iterate_test();
But I can't get it to work. How do I execute a data query in the form of text?
Full function code:
CREATE OR REPLACE FUNCTION iterate_test()
RETURNS text
LANGUAGE plpgsql
AS
$$
DECLARE
temprow record;
str_query text := 'SELECT DISTINCT(t1.date) AS date';
prev_table text := 't1';
BEGIN
FOR temprow IN SELECT * FROM portfolios WHERE user_name='snigelnmjau'
LOOP
str_query := str_query || format(', %s.adjusted_close AS %s', temprow.ticker, temprow.ticker);
END LOOP;
str_query := str_query || format(' FROM clean_daily AS t1 ');
FOR temprow IN SELECT * FROM portfolios WHERE user_name='snigelnmjau'
LOOP
str_query := str_query || format(E'INNER JOIN clean_daily AS %s ON %s.date=%s.date AND %s.ticker=''%s'' ', temprow.ticker, prev_table, temprow.ticker, temprow.ticker, temprow.ticker);
prev_table := temprow.ticker;
END LOOP;
str_query := str_query || 'ORDER BY t1.date DESC;';
--EXECUTE str_query;
RETURN str_query;
END;
$$;