Ho questa funzione PL/pgSQL che deve restituire alcune informazioni agli utenti.Funzioni PL/pgSQL: Come restituire la tabella con una istruzione execute
CREATE OR REPLACE FUNCTION my_function(user_id integer)
RETURNS TABLE(id integer, firstname character varying
, lastname character varying) AS
$$
DECLARE
ids character varying;
BEGIN
ids := '';
--Some code which build the ids string, not interesting for this issue
RETURN QUERY EXECUTE 'SELECT users.id, users.firstname, users.lastname
FROM public.users WHERE ids IN (' || ids || ')';
END;
$$ LANGUAGE plpgsql;
Il problema che sto affrontando è che il risultato della funzione è una singola tabella colonne in questo modo:
╔═══╦═════════════════════╗
║ ║my_function ║
╠═══╬═════════════════════╣
║ 1 ║ (106,Ned,STARK) ║
║ 2 ║ (130,Rob,STARK) ║
╚═══╩═════════════════════╝
Mentre mi aspettavo:
╔═══╦════════════╦════════════╦═════════════╗
║ ║ id ║ firstname ║ lastname ║
╠═══╬════════════╬════════════╬═════════════╣
║ 1 ║ 106 ║ Ned ║ STARK ║
║ 2 ║ 103 ║ Rob ║ STARK ║
╚═══╩════════════╩════════════╩═════════════╝
credo (ma non sono sicuro) il problema deriva dall'istruzione EXECUTE
, ma non riesco a vedere come fare diversamente.
Qualche idea?
Stai funzione con 'SELEZIONA my_function (123) chiamata; o' 'SELEZIONA DA my_function (123);'? –
Hai perfettamente ragione, ho eseguito la funzione con SELECT my_function (123); funziona perfettamente con il FROM ... Grazie! – Getz