Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2008
dark_monk9 dark_monk9 is offline
Miembro
 
Registrado: ago 2007
Posts: 22
Poder: 0
dark_monk9 Va por buen camino
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!!!!!!!!
Responder Con Cita
  #2  
Antiguo 23-04-2008
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
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 22:10:02. Razón: Se me olvidó una cosa
Responder Con Cita
  #3  
Antiguo 23-04-2008
dark_monk9 dark_monk9 is offline
Miembro
 
Registrado: ago 2007
Posts: 22
Poder: 0
dark_monk9 Va por buen camino
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 06:06:26.
Responder Con Cita
  #4  
Antiguo 16-01-2012
Avatar de jejo1984
jejo1984 jejo1984 is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 39
Poder: 0
jejo1984 Va por buen camino
Aqui tienes otro ejemplo de una funcion insert:

Código SQL [-]
CREATE OR REPLACE FUNCTION insert_tip_demorada(_tipo_nombre character, _descrip_tipo character)
  RETURNS boolean AS
$BODY$
begin
INSERT INTO tipo_demo(tipo_nombre,descrip_tipo) VALUES(_tipo_nombre,_descrip_tipo);
RETURN True;
exception
when integrity_constraint_violation then
RAISE NOTICE 'Rollback to savepoint';
RETURN False;
end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar formula almacenada en tabla mosorio SQL 2 28-06-2007 22:14:38
Error de Sintaxis al Insertar datos a una tabla desde otra alastor SQL 9 28-09-2006 19:27:09
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 16:36:12
como saber el identificador del último registro almacenada en una base de datos. soyhugo Varios 2 16-02-2004 17:04:04
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 12:29:40


La franja horaria es GMT +2. Ahora son las 13:07:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi