From: | "Daniel Carrero" <dxduke(at)gmail(dot)com> |
---|---|
To: | "Luis Rodrigo Gallardo Cruz" <rodrigo(at)nul-unu(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Consulta sobre funcion |
Date: | 2006-06-20 19:50:56 |
Message-ID: | 270a87700606201250x719783d8j58c6e68bdd69c8d6@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On 20/06/06, Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com> wrote:
> 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?
>
Si ahora si, en realidad sé la diferencia entre funcion y
procedimiento, en pascal lo habia hecho hace años.
> > >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'.
>
Entonces una funcion tiene varios bloques, delimitados tanto por BEGIN
- END como por BEGIN - ROLLBACK - COMMIT - END
Es asi?
> > 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.
Si es cierto, pero si la respuesta ubiese sido un poco mas documentada
pero bueno, buscare acerca de SAVEPOINT
>
> --
> Rodrigo Gallardo
> GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.3 (GNU/Linux)
>
> iD8DBQFEmEv0AZmDGK3JvCgRAjIgAJ0WYvwUHVf8GyGDY0iWSocAPo7lUACfdQVP
> VdXenBiA8tyoOqFA680kiTI=
> =Tg3f
> -----END PGP SIGNATURE-----
>
>
>
--
Atte.
Daniel Carrero
Analista Programador
From | Date | Subject | |
---|---|---|---|
Next Message | Luis Rodrigo Gallardo Cruz | 2006-06-20 20:14:50 | Re: Consulta sobre funcion |
Previous Message | Oswaldo Hernández | 2006-06-20 19:49:59 | Re: PANIC: ERRORDATA_STACK_SIZE exceeded |