Re: Consulta sobre funcion

From: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre funcion
Date: 2006-06-20 19:26:44
Message-ID: 20060620192644.GH4187@mail.interservice.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Jun 20, 2006 at 02:57:08PM -0400, Daniel Carrero wrote:
> On 20/06/06, Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com> wrote:
> >Hasta aquí, bien. Sólo, olvidate de la distinción
> >función/procedimiento. En postgres son lo mismo.
> Hummm.... ?

Por alguna razón, muchos lenguajes de programación hacen una
distinción entre 'funciones' y 'funciones que no regresan un
valor'=procedimientos. Tienen reglas acerca de como declarar cada una
y dónde puedes declararlas y donde puedes usarlas. Postgres (y C, y
Lisp, y Java, y Python, y Perl, y ...) no tienen esa distinción. Solo
hay funciones, que regresan 'valores', dónde uno de los 'valores'
posibles es 'void' (Más o menos, pues. Solicito indulgencia a los
puristas del diseño de lenguajes).

¿Ahora sí se entiende?

> >Me imagino que te refieres al caso en que la función detecta un error,
> >¿cierto? Fácil: Sí el error lo detectó la misma base de datos (por que
> >violaste alguna regla de integridad referencial, por ejemplo), la
> >misma base de datos aborta la transacción.
> >Si el error lo detecta tu
> >función (digamos que ejecutas una validación de datos y ésta falla),
> >tu función lanza una excepción y la base de datos, al recibir eso,
> >aborta la transacción.
> Un trigger verdad??

Cualquier función.

> http://es.wikipedia.org/wiki/Transacci%C3%B3n
> aqui la definicion es clara,

> entonces una transaccion puede tener
> varios bloques definidos por un BEGIN y END,

¿Y esto de dónde lo sacas? Una transacción es *un* bloque (delimitado
en SQL por BEGIN - COMMIT/ROLLBACK)

> dentro de esta puedo usar COMMIT o ROLLBACK,

No. El COMMIT/ROLLBACK *delimita* la transacción. Uno cualquiera de
ellos es el 'END'.

> la pregunta que ahora me sale es si dentro de una
> funcion puedo hacer una transaccion ???

Si mal no recuerdo, ya Alvaro dijo *en esta misma hebra* que no.
Lo que puedes hacer es un SAVEPOINT, que viene a ser algo parecido a
una subtransacción.

--
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Oswaldo Hernández 2006-06-20 19:49:59 Re: PANIC: ERRORDATA_STACK_SIZE exceeded
Previous Message WILLIAM PARRA 2006-06-20 19:18:34 Re: modelado de datos