Re: [Pgsql-ayuda] Invocacion de una funcion

From: Alvaro Herrera Munoz <alvherre(at)dcc(dot)uchile(dot)cl>
To: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
Cc: Pgsql <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: Re: [Pgsql-ayuda] Invocacion de una funcion
Date: 2003-08-12 23:01:19
Message-ID: 20030812230119.GC9586@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Aug 12, 2003 at 04:53:20PM -0400, Edwin Quijada wrote:
> Estoy haciendo mi primera funcion con pl/sql y cuando la ejecuto me da el
> sigte error

Primero que nada, te sugiero que uses una secuencia. Tu solucion tiene
problemas serios si hay dos transacciones insertando concurrentemente.
Puedes crear una secuencia con:
CREATE SEQUENCE

despues la usas asi:
SELECT nextval('nombre-de-la-secuencia');
o bien
SELECT currval('nombre-de-la-secuencia');

Ojo, este currval() devuelve el ultimo valor que la secuencia te
devolvio _a ti_, no el ultimo valor que le devolvio a cualquiera. De
este modo, varios pueden incrementar la secuencia concurrentemente y tu
puedes llamar a currval() para obtener el valor que tu recibiste.

Tambien puedes usar un campo SERIAL:
CREATE TABLE docs (
doc_id SERIAL PRIMARY KEY,
nombre TEXT
...
)

Y despues haces:
INSERT INTO docs (nombre , ...) VALUES (...)
(omitiendo el campo SERIAL). Automaticamente se va a insertar el valor
correspondiente de la secuencia. Ademas, si necesitas el valor para
otra cosa puedes hacer SELECT currval('docs_doc_id_seq'), y te devuelve
el valor correcto.

> Error occurred while executing PL/pgSQL function get_secuencia
> WARNING: line 6 at SQL statement
> ERROR: SELECT query has no destination for result data.
> If you want to discard the results, use PERFORM instead.

Si no necesitas lo que devuelva SELECT, entonces usa PERFORM en lugar de
SELECT (basta con leer el mensaje). Si necesitas el valor que devuelve,
entonces usa SELECT INTO. Pero te aseguro que en este caso esta _no_ es
la solucion correcta.

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"El que vive para el futuro es un iluso, y el que vive para el pasado,
un imbcil" (Luis Adler, "Los tripulantes de la noche")

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera Munoz 2003-08-12 23:09:01 Re: [Pgsql-ayuda] HELP!! recuperacion de tablas
Previous Message sandrigo lezcano 2003-08-12 22:58:47 [Pgsql-ayuda] select CAST(text '123.456.789' as int8) AS valor_sin_puntos;