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

Duda simple

Estas en el tema de Duda simple en el foro de PostgreSQL en Foros del Web. Hola buen dia a todos. Tengo unas pequeñas dudas sobre como hacer una funcion que despues de actualizar o insertar en mi tabla1 se ejecute ...
  #1 (permalink)  
Antiguo 18/08/2008, 12:53
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 12 años, 6 meses
Puntos: 0
Duda simple

Hola buen dia a todos.
Tengo unas pequeñas dudas sobre como hacer una funcion que despues de actualizar o insertar en mi tabla1 se ejecute la funcion y realise una busqueda en mi tabla2 donde el registro inseertado o actualizado se encuentre en esta tabla2, de ser asi necesito hacer un insert.
Pero no se muy bien como hacer esto, alguien puede hecharme una mano.
Gracias por anticipado.
  #2 (permalink)  
Antiguo 18/08/2008, 15:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Duda simple

Hola tienes q hacer una funcion q te retorne un Trigger...
En el trigger especificas si kieres q se dispare antes o despues de una accion (INSERT, UPDATE, DELETE) y sobre q tabla..
Por ejemplo :
Mi Funcion:

CREATE OR REPLACE FUNCTION actualiza_estado()
RETURNS TRIGGER AS $recorrido_estado$
DECLARE
registros numeric(8);

BEGIN
SELECT COUNT(*) into registros
FROM recorrido;

IF registros >= 1 THEN

UPDATE recorrido
SET estado = 'F'
WHERE codigo_uni= new.codigo_uni
and time =
(select MAX(time)
from recorrido as destino
where codigo_uni = destino.codigo_uni);
END IF;
RETURN new;

END;
$recorrido_estado$ LANGUAGE plpgsql;

Y trigger:
CREATE TRIGGER recorrido_estado BEFORE INSERT ON recorrido FOR EACH ROW EXECUTE PROCEDURE actualiza_estado();

EL cual se dispara antes de hacer un insert en la tabla recorrido...

Saludos...
  #3 (permalink)  
Antiguo 18/08/2008, 16:12
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Duda simple

Ok gracias por el ejemplo auque no entiendo mucho es allgo complejo para mi. ahora tengo una duda como puedo asignarle a una variable un select lo que pasa es que tengo el siguiente codigo y no em funciona me marca un error.

CREATE OR REPLACE FUNCTION mi_trigger_trg()
RETURNS "trigger" AS
$BODY$
DECLARE

consulta varchar;


BEGIN
consulta := SELECT * FROM MI_TABLA WHERE MI_TABLA_ID=NEW.MI_TABLA_ID ;
IF consulta ISNULL THEN
RAISE NOTICE ' SIN REGISTROS';
END IF;

END; $BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION mi_trigger_trg() OWNER TO desarrollo;


Me aparece el siguiente error



ERROR: error de sintaxis en o cerca de «SELECT»
LINE 1: SELECT SELECT * FROM MI_TABLA WHERE MI_TABLA_ID...
^
QUERY: SELECT SELECT * FROM MI_TABLA WHERE MI_TABLA_ID= $1
CONTEXT: SQL statement in PL/PgSQL function "mi_trigger_trg" near line 9

********** Error **********

ERROR: error de sintaxis en o cerca de «SELECT»
Estado SQL:42601
Contexto:SQL statement in PL/PgSQL function "mi_trigger_trg" near line 9


Lo que quiero hacer es que despues de insertar o actualizar en la tabla carros automaticamente busque algun registro existente en MI_TABLA de ese carro si es null que me mande un mensaje que no existen registros.
Esto solo es la primera parte de mi trigger y aun no logro ahcerlo alguien puede orientarme.

Última edición por mayte85; 18/08/2008 a las 16:17
  #4 (permalink)  
Antiguo 19/08/2008, 01:13
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Duda simple

Prueba
Código:
...

IF ( (SELECT count(*) FROM MI_TABLA WHERE MI_TABLA_ID=NEW.MI_TABLA_ID) != 0 )
THEN
  RAISE NOTICE ' SIN REGISTROS';
END IF;
si quieres guardar el resultado en una variable: select count(*) into variable from ....

Salu2
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 12:54.