FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Error en funcion almacenada para insertar datos a tabla
Wenas de nuevo!!!!
Tengo el siguiente inconveniente, cree una funcion que se supone me debe llenar los datos de una tabla, la funcion se almacena sin ningun error, pero el problema viene cuando la invoco para mandarle los datos por parametros. La tabla es la siguiente: tabla metactividad idindicadoresespecificos int8 Primary Key idactividad varchar unidadmedida varchar meta numeric descripcion varchar -------- Esta es la funcion--------- CREATE OR REPLACE FUNCTION anadir_metactividad(IN idindicadoresespecif INT, IN idactivid VARCHAR, IN unidadmed VARCHAR, IN meta NUMERIC, IN descripc VARCHAR) RETURNS void AS $BODY$ BEGIN INSERT INTO beneficiario VALUES (idindicadoresespecif, dactivid, unidadmed, meta, descripc); END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; /----------------------- De esa forma la invoco select anadir_metactividad(5,'666','777',121,'333') FROM metactividad; /---------------------- Y me salen estos errores: ERROR: duplicate key violates unique constraint "metactividad_pkey" CONTEXT: SQL statement "INSERT INTO metactividad VALUES ( $1 , $2 , $3 , $4 , $5 )" PL/pgSQL function "anadir_metactividad" line 2 at SQL statement Lo que me parece extraño es que me diga que intento duplicar la llave primaria, sabiendo que los datos que estoy mandando no existen en la tabla. La funcion se supone debe recibir los datos de donde la invoco para de esta forma llenar la tabla, pero la verdad no se que estoy haciendo mal. Gracias a todos!!!!!!!! |
#2
|
||||
|
||||
El error está en el llamado de la función que estas haciendo:
select anadir_metactividad(5,'666','777',121,'333') FROM metactividad; si la tabla meta actividad tiene por ejemplo tres registros: Registro uno: A, B, C, D Registro dos: E, F, G, H Registro tres: T, H, J, I Al hacer el siguiente select: select -------- FROM metactividad estas trayendo los tres registros, y por cada uno se ejecutaria la instrucción: anadir_metactividad(5,'666','777',121,'333') anadir_metactividad(5,'666','777',121,'333') anadir_metactividad(5,'666','777',121,'333') o sea que la estas intentando insertar tres veces.... debes hacer este llamado asi: Select anadir_metactividad(5,'666','777',121,'333'); en Oracle por ejemplo sería: Select anadir_metactividad(5,'666','777',121,'333') from dual pero en PostgreSQL no neceitas darle un from para ejecutar esa sentencia... Espero que te haya servido, Saludos, Última edición por gatosoft fecha: 23-04-2008 a las 21:10:02. Razón: Se me olvidó una cosa |
#3
|
|||
|
|||
Muchas gracias!!!! Lo voy a probar y vuelvo a molestar si aglo raro ocurre :P
Gracias!!!!!!!!! EDIT: Tenias toda la razon, muchas gracias por la ayuda funciono sin problema!!!!!!!!!!!!!! Última edición por dark_monk9 fecha: 24-04-2008 a las 05:06:26. |
#4
|
||||
|
||||
Aqui tienes otro ejemplo de una funcion insert:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ejecutar formula almacenada en tabla | mosorio | SQL | 2 | 28-06-2007 21:14:38 |
Error de Sintaxis al Insertar datos a una tabla desde otra | alastor | SQL | 9 | 28-09-2006 18:27:09 |
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla | taru | MySQL | 1 | 27-07-2006 15:36:12 |
como saber el identificador del último registro almacenada en una base de datos. | soyhugo | Varios | 2 | 16-02-2004 16:04:04 |
Como insertar datos de una tabla en otra tabla? | Salomon | Firebird e Interbase | 1 | 28-08-2003 11:29:40 |
|