Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Ayuda con mi primer trigger

Estas en el tema de Ayuda con mi primer trigger en el foro de PostgreSQL en Foros del Web. Hola, es mi primer contacto con psotgresql. necesito hacer un trigger sencillo que ejecute un procedimiento almacenado donde hago un insert en otra tabla. Tengo ...
  #1 (permalink)  
Antiguo 21/06/2010, 09:13
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años, 7 meses
Puntos: 1
Ayuda con mi primer trigger

Hola, es mi primer contacto con psotgresql.
necesito hacer un trigger sencillo que ejecute un procedimiento almacenado donde hago un insert en otra tabla.

Tengo PostgreSQL 8.0.1.

He visto la documentacion en la web de ejemplos sencillos de como crear triggers, pero no me funciona nada.....
  • No se como crear un procedure, solo se crear funciones
  • Si ejecuto esto CREATE FUNCTION audita() RETURNS trigger AS me dice que "SQL functions cannot return type "trigger"
  • Si creo una funcion normal, y creo un trigger que la ejecute, me dice que no existe la función, cuando está claro que si existe..será otra cosa lo que tengo que crear...¿alguien me puede ayudar por favor?


Gracias!
  #2 (permalink)  
Antiguo 21/06/2010, 21:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Ayuda con mi primer trigger

La sentencia create procedure en postgresql realmente no existe. se considera un procedure una función que ejecute una serie de procedimientos.

Cuando retornes un trigger metelo entre comillas.

Código SQL:
Ver original
  1. CREATE FUNCTION audita() RETURNS "trigger" AS

para ejecutarlo, si se le llama procedure.
Código SQL:
Ver original
  1. CREATE TRIGGER trig EXECUTE PROCEDURE la_funcion;

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/06/2010, 05:41
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Ayuda con mi primer trigger

graicas por tu respuesta,

pero hago eso y me dice...
SQL functions cannot return type "trigger"
  #4 (permalink)  
Antiguo 22/06/2010, 06:38
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Ayuda con mi primer trigger

Solo te pasa con triggers o también tienes problemas con una función normal?
Es posible que no hayas creado el lenguaje PL/PgSQL.

Prueba esto:
Código SQL:
Ver original
  1. CREATE LANGUAGE 'plpgsql';
Postea la función y el trigger en su totalidad y miramos que puede estar pasando.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 22/06/2010, 17:51
 
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con mi primer trigger

Hola,

Haber te echo la mano dejándote la función y trigger que la ejecuta y que están funcionando a la perfección, espero que te puedas guiar:

Función:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION proy.sptractualizafactura() RETURNS TRIGGER
  2. AS $proc$
  3. DECLARE
  4.     vsubtotal NUMERIC;
  5.     vporiva NUMERIC;
  6.     vcantiva NUMERIC;
  7.     vtotal NUMERIC;
  8. BEGIN
  9.     SELECT INTO vsubtotal SUM(total)
  10.         FROM proy.tregistra
  11.         WHERE idfactura=NEW.idfactura;
  12.     IF (FOUND) THEN
  13.         SELECT INTO vporiva, vcantiva  poriva, cantiva
  14.             FROM proy.tfactura
  15.             WHERE idfactura=NEW.idfactura;
  16.         IF (FOUND) THEN
  17.             vcantiva:= (vsubtotal*vporiva)/100;
  18.             vtotal:= vsubtotal+vcantiva;
  19.             UPDATE proy.tfactura
  20.                 SET subtotal=vsubtotal, cantiva=vcantiva, total=vtotal
  21.                 WHERE idfactura=NEW.idfactura;     
  22.         END IF;
  23.     END IF;
  24.     RETURN NEW;
  25. END; $proc$
  26. LANGUAGE 'plpgsql';

Trigger:

Código SQL:
Ver original
  1. CREATE TRIGGER tractualizafactura
  2. AFTER INSERT OR UPDATE
  3. ON proy.tregistra
  4. FOR EACH ROW
  5. EXECUTE PROCEDURE proy.sptractualizafactura();

Saludos.
  #6 (permalink)  
Antiguo 23/06/2010, 02:57
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Ayuda con mi primer trigger

gracias a todos, ahora estoy en proceso de poder ejecutar el CREATE LANGUAGE 'plpgsql'; que creo que es por donde van los tiros, pero como yo no soy el superadministrador, no puedo crear el lenguaje, a ver si me lo hacen y os cuento.
  #7 (permalink)  
Antiguo 01/07/2010, 06:55
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Ayuda con mi primer trigger

Gracias a todos, ya lo conseguí, al final todo era que no tenía permiso de superadministrador, no sabía que tenía que crear el lenguaje plsql en cada base de datos, crear la funcion call_handler....fui tirando del hilo pues no sabía gran cosa de postgre y ya me salió..

Etiquetas: primer, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:40.