Re: diferencias con funcion definida "setof" y "no setof"

From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: gherzig(at)fmed(dot)uba(dot)ar
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: diferencias con funcion definida "setof" y "no setof"
Date: 2010-06-25 16:00:13
Message-ID: AANLkTimgZi6WJ0-1OX-fxD8CsqnmyqQxVuyRetZ8StDs@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 24 de junio de 2010 16:10, <gherzig(at)fmed(dot)uba(dot)ar> escribió:
> Hola chicos. Me asalto una duda.
> Cuando defino una funcion cualquiera, digamos
> CREATE FUNCTION pp()
> returns setof public.pp
> as
> $$
> select * from public.pp where id=999999;
> $$
>
> En la tabla pp *no* existe ese id 999999....Bien.
> test=# SELECT * from pp();
>  id| descripcion|
> ------------+-------------+
> (0 filas)
>
>
> Cuando la ejecuto, me devuelve 0 registros. Fantastico
>
> Ahora, si defino la misma funcion, pero devolviendo simplemente
> `returns public.pp', al ejecutar la funcion me trae 1 (un!) registro con
> null'es
> test=# SELECT * from pp();
>  id | descripcion
> ------------+-------------
>            |             |
> (1 fila)
>
> ??
> Algun motivo para esta variacion de comportamiento?
> PG 8.3.11
>

En realidad la funcion no retorna valor, la fila que te esta
devolviendo es la del select invocante:

SELECT NULL; (te devolvera una fila)
SELECT pp(); (una fila)
SELECT * FORM pp(); una fila

En la primera, la funcion al ser fuente de datos, es distinto porque
la consulta toma los datos del set (que esta vacio), sin embargo
cuando ejecutas una consulta 'sin' fuentes' de datos, te devolvera 1
fila ( now(), current_date, etc.)

--
Emanuel Calvo Franco
www.emanuelcalvofranco.com.ar
Join: http://www.thevenusproject.com/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gerardo Herzig 2010-06-25 19:31:41 Re: diferencias con funcion definida "setof" y "no setof"
Previous Message Sergio Valdes Hurtado 2010-06-24 19:45:05 Re: [pgsql-es-ayuda] Creación de id