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,
Sí
> 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
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 |