PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Retorne o registro setof (tabela virtual) da função


(Tudo isso foi testado com o postgresql 8.3.7 - você tem uma versão anterior? apenas olhando para o uso de "ALIAS FOR $ 1")
CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
 RETURNS SETOF RECORD AS $$
DECLARE
 open_id ALIAS FOR $1;
 result RECORD;
BEGIN
 RETURN QUERY SELECT '1', '2', '3';
 RETURN QUERY SELECT '3', '4', '5';
 RETURN QUERY SELECT '3', '4', '5';
END
$$;

Se você tiver um registro ou variável de linha para retornar (em vez de um resultado de consulta), use "RETURN NEXT" em vez de "RETURN QUERY".

Para invocar a função você precisa fazer algo como:
select * from storeopeninghours_tostring(1) f(a text, b text, c text);

Portanto, você precisa definir o que espera que o esquema de linha de saída da função esteja na consulta. Para evitar isso, você pode especificar variáveis ​​de saída na definição da função:
CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
 RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
 RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;

(não tenho certeza por que os extras ::text casts são necessários ... '1' é um varchar por padrão talvez?)