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

From: Gerardo Herzig <gherzig(at)fmed(dot)uba(dot)ar>
To: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: diferencias con funcion definida "setof" y "no setof"
Date: 2010-06-25 19:31:41
Message-ID: 4C25041D.80405@fmed.uba.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Emanuel Calvo Franco wrote:
> 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.)
>
>
Aha...aha...aha...ok...
No lo entiendo, pero se que no me convence. Es decir, esto "rompe" con
la logica de "la capa de arriba" de un sistema en el cual participo, en
el cual muchas veces usan la longitud del RecordSet o similar (de .NET)
para saber si la consulta obtuvo algun resultado. Con este asunto, esa
tecnica, que tiene (a mi entender) mucho sentido comun, no sirve, pues
el RecordSet nunca tiene longitud 0, lo que seria esperable para una
consulta que no encontro ningun registro!

Gracias por tu tiempo, Emanuel!

Saludos.
Gerardo

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2010-06-28 07:12:52 Advertencia: Fin de soporte para las versiones 7.4 y 8.0 de PostgreSQL
Previous Message Emanuel Calvo Franco 2010-06-25 16:00:13 Re: diferencias con funcion definida "setof" y "no setof"