Fala galera,
 no sistema aqui, precisei criar uma stored procedure pra fazer um
calculo, porem em varias colunas:
ta tudo OK com o select, porém quando eu boto pra criar a procedure
ele retorna o erro (veja abaixo do SQL)
Stored procedure(Verificar abaixo):


CREATE OR REPLACE FUNCTION social.soc_tx_mortalidadegeral_2000_2007_pa()
  RETURNS double precision AS
$BODY$

SELECT distinct ((taxa_mortalidadegeral2000.num_masculino +
taxa_mortalidadegeral2000.num_feminino +
taxa_mortalidadegeral2000.num_ignorado) /
populacao2000.populacao_total2000 * 1000::double precision) AS
taxa_mortalidadegeral2000, ((taxa_mortalidadegeral2001.num_masculino +
taxa_mortalidadegeral2001.num_feminino +
taxa_mortalidadegeral2001.num_ignorado) /
populacao2001.populacao_total2001 * 1000::double precision) AS
taxa_mortalidadegeral2001, ((taxa_mortalidadegeral2002.num_masculino +
taxa_mortalidadegeral2002.num_feminino +
taxa_mortalidadegeral2002.num_ignorado) /
populacao2002.populacao_total2002 * 1000::double precision) AS
taxa_mortalidadegeral2002, ((taxa_mortalidadegeral2003.num_masculino +
taxa_mortalidadegeral2003.num_feminino +
taxa_mortalidadegeral2003.num_ignorado) /
populacao2003.populacao_total2003 * 1000::double precision) AS
taxa_mortalidadegeral2003, ((taxa_mortalidadegeral2004.num_masculino +
taxa_mortalidadegeral2004.num_feminino +
taxa_mortalidadegeral2004.num_ignorado) /
populacao2004.populacao_total2004 * 1000::double precision) AS
taxa_mortalidadegeral2004, ((taxa_mortalidadegeral2005.num_masculino +
taxa_mortalidadegeral2005.num_feminino +
taxa_mortalidadegeral2005.num_ignorado) /
populacao2005.populacao_total2005 * 1000::double precision) AS
taxa_mortalidadegeral2005, ((taxa_mortalidadegeral2006.num_masculino +
taxa_mortalidadegeral2006.num_feminino +
taxa_mortalidadegeral2006.num_ignorado) /
populacao2006.populacao_total2006 * 1000::double precision) AS
taxa_mortalidadegeral2006, ((taxa_mortalidadegeral2007.num_masculino +
taxa_mortalidadegeral2007.num_feminino +
taxa_mortalidadegeral2007.num_ignorado) /
populacao2007.populacao_total2007 * 1000::double precision) AS
taxa_mortalidadegeral2007
   FROM ( SELECT soc_obitos_fxe_causas_2000.estado,
sum(soc_obitos_fxe_causas_2000.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2000.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2000.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2000
          GROUP BY soc_obitos_fxe_causas_2000.estado)
taxa_mortalidadegeral2000, ( SELECT soc_obitos_fxe_causas_2001.estado,
sum(soc_obitos_fxe_causas_2001.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2001.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2001.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2001
          GROUP BY soc_obitos_fxe_causas_2001.estado)
taxa_mortalidadegeral2001,( SELECT soc_obitos_fxe_causas_2002.estado,
sum(soc_obitos_fxe_causas_2002.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2002.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2002.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2002
          GROUP BY soc_obitos_fxe_causas_2002.estado)
taxa_mortalidadegeral2002,( SELECT soc_obitos_fxe_causas_2003.estado,
sum(soc_obitos_fxe_causas_2003.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2003.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2003.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2003
          GROUP BY soc_obitos_fxe_causas_2003.estado)
taxa_mortalidadegeral2003,( SELECT soc_obitos_fxe_causas_2004.estado,
sum(soc_obitos_fxe_causas_2004.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2004.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2004.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2004
          GROUP BY soc_obitos_fxe_causas_2004.estado)
taxa_mortalidadegeral2004,( SELECT soc_obitos_fxe_causas_2005.estado,
sum(soc_obitos_fxe_causas_2005.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2005.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2005.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2005
          GROUP BY soc_obitos_fxe_causas_2005.estado)
taxa_mortalidadegeral2005,( SELECT soc_obitos_fxe_causas_2006.estado,
sum(soc_obitos_fxe_causas_2006.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2006.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2006.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2006
          GROUP BY soc_obitos_fxe_causas_2006.estado)
taxa_mortalidadegeral2006,( SELECT soc_obitos_fxe_causas_2007.estado,
sum(soc_obitos_fxe_causas_2007.masculino) AS num_masculino,
sum(soc_obitos_fxe_causas_2007.feminino) AS num_feminino,
sum(soc_obitos_fxe_causas_2007.sexo_ignorado) as num_ignorado
           FROM social.soc_obitos_fxe_causas_2007
          GROUP BY soc_obitos_fxe_causas_2007.estado)
taxa_mortalidadegeral2007, ( SELECT dem_pop_2000.estado,
sum(dem_pop_2000.populacao_total) AS populacao_total2000
           FROM demografia.dem_pop_2000 dem_pop_2000
          GROUP BY dem_pop_2000.estado) populacao2000, ( SELECT
dem_pop_2001.estado, sum(dem_pop_2001.populacao_total) AS
populacao_total2001
           FROM demografia.dem_pop_2001 dem_pop_2001
          GROUP BY dem_pop_2001.estado) populacao2001, ( SELECT
dem_pop_2002.estado, sum(dem_pop_2002.populacao_total) AS
populacao_total2002
           FROM demografia.dem_pop_2002 dem_pop_2002
          GROUP BY dem_pop_2002.estado) populacao2002, ( SELECT
dem_pop_2003.estado, sum(dem_pop_2003.populacao_total) AS
populacao_total2003
           FROM demografia.dem_pop_2003 dem_pop_2003
          GROUP BY dem_pop_2003.estado) populacao2003, ( SELECT
dem_pop_2004.estado, sum(dem_pop_2004.populacao_total) AS
populacao_total2004
           FROM demografia.dem_pop_2004 dem_pop_2004
          GROUP BY dem_pop_2004.estado) populacao2004, ( SELECT
dem_pop_2005.estado, sum(dem_pop_2005.populacao_total) AS
populacao_total2005
           FROM demografia.dem_pop_2005 dem_pop_2005
          GROUP BY dem_pop_2005.estado) populacao2005, ( SELECT
dem_pop_2006.estado, sum(dem_pop_2006.populacao_total) AS
populacao_total2006
           FROM demografia.dem_pop_2006 dem_pop_2006
          GROUP BY dem_pop_2006.estado) populacao2006, ( SELECT
dem_pop_2007.estado, sum(dem_pop_2007.populacao_total) AS
populacao_total2007
           FROM demografia.dem_pop_2007 dem_pop_2007
          GROUP BY dem_pop_2007.estado) populacao2007, ( SELECT
limitemunicipal.estado, limitemunicipal.the_geom, limitemunicipal.gid
           FROM limitemunicipal) lm
  WHERE taxa_mortalidadegeral2000.estado::text =  lm.estado::text AND
populacao2000.estado::text = lm.estado::text and
        taxa_mortalidadegeral2001.estado::text =  lm.estado::text AND
populacao2001.estado::text = lm.estado::text and
        taxa_mortalidadegeral2002.estado::text =  lm.estado::text AND
populacao2002.estado::text = lm.estado::text and
        taxa_mortalidadegeral2003.estado::text =  lm.estado::text AND
populacao2003.estado::text = lm.estado::text and
        taxa_mortalidadegeral2004.estado::text =  lm.estado::text AND
populacao2004.estado::text = lm.estado::text and
        taxa_mortalidadegeral2005.estado::text =  lm.estado::text AND
populacao2005.estado::text = lm.estado::text and
        taxa_mortalidadegeral2006.estado::text =  lm.estado::text AND
populacao2006.estado::text = lm.estado::text and
        taxa_mortalidadegeral2007.estado::text =  lm.estado::text AND
populacao2007.estado::text = lm.estado::text;

$BODY$
  LANGUAGE 'sql' VOLATILE


Erro:

ERROR:  return type mismatch in function declared to return double precision
DETAIL:  Final SELECT must return exactly one column.
CONTEXT:  SQL function "soc_tx_mortalidadegeral_2000_2007_pa"

********** Erro **********

ERROR: return type mismatch in function declared to return double precision
SQL state: 42P13
Detalhe: Final SELECT must return exactly one column.
Contexto: SQL function "soc_tx_mortalidadegeral_2000_2007_pa"






Pelo que vi, a stored procedure espera o retorno de uma coluna apenas?
tem alguma forma que eu possa fazer com que o retorno sejam de mais
colunas?

agradeço desde ja!


Bruno Sales
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a