Sunday, June 8, 2008

Re: [pgsql-es-ayuda] generatedKeys, jdbc: no logro obtener llaves generadas

redirigiendo a la lista

2008/6/8 Roberto Rodríguez Pino <rodpin@gmail.com>:
>
> El dom, 08-06-2008 a las 12:57 -0500, Jaime Casanova escribió:
>
>> Mmm... tienes razon... aunque no estoy seguro que te hayas percatado
>> que la funcion que declare no es plpgsql sino sql, mira la clausula
>> LANGUAGE...
>>
>> las funciones sql no necesitan un return sino que regresen el valor
>> que retorne el ultimo select, crei que haria lo mismo con la clausula
>> RETURNING de un insert/update/delete pero no es asi... la funcion
>> podrias hacerla asi
>>
>> CREATE OR REPLACE function ingresarVoucherEntrada( _idEmpleado "int4",
>> _idProveedor "int4", _fechaEmision"date", _documentoAsociado"int4")
>> returns int as $$
>>
>> insert into voucherEntrada (idEmpleado, idProveedor, fechaEmision,
>> docuementoasociado)
>> values (_idEmpleado, _idProveedor, _fechaEmision,_documentoAsociado);
>>
>> select currval('nombre de la secuencia que usa el serial')::int;
>>
>> $$ LANGUAGE 'sql' VOLATILE;
>>
>>
> He probado lo siguiente:
> CREATE OR REPLACE function ingresarVoucherEntrada( _idEmpleado "int4",
> _idProveedor "int4", _fechaEmision"date", _documentoAsociado"int4")
> returns int as $$
> insert into voucherEntrada (idEmpleado, idProveedor,
> fechaEmision, docuementoasociado)
> values ($1, $2, $3,$4);
>
> select currval('idvoucherentrada')::int;
> $$ LANGUAGE 'sql' VOLATILE;
>
> y obtengo un
> ERROR: no existe la relación «idvoucherentrada»
> CONTEXT: función SQL «ingresarvoucherentrada»
> Al tratar de ingresar la funcion.
>

http://www.postgresql.org/docs/8.3/static/sql-createsequence.html
http://www.postgresql.org/docs/8.3/static/datatype-numeric.html#DATATYPE-SERIAL

Las secuencias son objetos que generan numeros secuenciales, es lo que
usa el tipo serial para generar el siguiente numero

en la funcion currval debes usar el nombre de la secuencia no el
nombre del campo... si no le has cambiado el nombre a la secuencia y
puesto que no sabias lo que era probablemente no lo has hecho,
entonces el nombre de la secuencia que afecta a ese campo serial debe
ser nombretabla_nombrecolumna_seq

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Guayaquil - Ecuador
Cel. (593) 87171157
--
TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?

http://archives.postgresql.org/pgsql-es-ayuda

No comments: