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

utilizar datos de un select para utilizarlos en un insert. PLPGSQL.

Estas en el tema de utilizar datos de un select para utilizarlos en un insert. PLPGSQL. en el foro de PostgreSQL en Foros del Web. buenas!!! Soy nuevo en programación plpgsql. Estoy un disparado. La idea de este disparador es que cada vez que realice un INSERT o UPDATE en ...
  #1 (permalink)  
Antiguo 08/11/2011, 13:40
 
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 13 años, 1 mes
Puntos: 0
utilizar datos de un select para utilizarlos en un insert. PLPGSQL.

buenas!!!
Soy nuevo en programación plpgsql.
Estoy un disparado. La idea de este disparador es que cada vez que realice un INSERT o UPDATE en una tabla, poder copiar los datos nuevos a otra tabla.
Sé que tengo mi store procedure bien definido, y mi trigger también funciona: A continuación muestro lo que he hecho:

-----------------------------------------------------------------------------------------------------------------------------
Código:
CREATE OR REPLACE FUNCTION realizo_operacion() RETURNS TRIGGER AS $realizo_operacion$
  DECLARE
  BEGIN
    
    --aqui coloco el query
  SELECT * FROM grey WHERE grey_id = 3;
    --Esta consulta trae 1 registro con 2 columnas.
  INSERT INTO prueba(prueba_id, prueba_nombre) VALUES ('INSERTO columna 1', 'INSERTO columna 2');

    RETURN NULL;
  END;
$realizo_operacion$ LANGUAGE plpgsql;
---------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
Código:
CREATE TRIGGER realizo_operacion AFTER INSERT OR UPDATE OR DELETE
    ON grey FOR EACH ROW 
    EXECUTE PROCEDURE realizo_operacion();
---------------------------------------------------------------------------------------------------------------------------

El ejemplo anterior es una simplificación del problema real. Este fue probado y funciona.

mi duda es la siguiente:

Cómo puedo obtener los datos de una consulta (Select) para utilizarlo en el query (Insert)???
lo que deseo es copiar los datos algunas de las columnas de la tabla donde esta el disparador a la otra. osea, copiar de una tabla a otra.

Gracias de antemano con la ayuda ofrecida.
  #2 (permalink)  
Antiguo 10/11/2011, 08:26
 
Fecha de Ingreso: septiembre-2011
Ubicación: Bogota
Mensajes: 31
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: utilizar datos de un select para utilizarlos en un insert. PLPGSQL.

mira para eso estan las instruciones NEW y OLD. te voy a poner un ejemplo a ver si te sirve :)

este es el trigger
Código SQL:
Ver original
  1. CREATE TRIGGER vf_trigger_cuenta_estado BEFORE UPDATE
  2. ON public.vf_verificacion_venta FOR EACH ROW
  3. EXECUTE PROCEDURE public.vf_audit_cuenta_estado();

y este es el procedimiento que se ejecuta cada vez que hace un UPDATE:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION public.vf_audit_cuenta_estado (
  2. )
  3. RETURNS TRIGGER AS
  4. $body$
  5. BEGIN
  6.    
  7.       IF (TG_OP = 'UPDATE') THEN
  8.      
  9.          IF(COALESCE(OLD.id_estado,0) <> NEW.id_estado OR COALESCE(OLD.observacion,'') <> NEW.observacion OR  COALESCE(OLD.id_solucion,0) <> NEW.id_solucion) THEN
  10.          
  11.              INSERT INTO vf_audit_cuenta_estado (audit_nrocuenta,audit_estado,audit_observacion,audit_solucion,audit_fecha,audit_usersys)
  12.                  SELECT NEW.nrocuenta,NEW.id_estado,NEW.observacion,NEW.id_solucion,now(),NEW.usersys ;                
  13.             RETURN NEW;
  14.           ELSEIF (TG_OP = 'DELETE') THEN
  15.                    RETURN NULL;
  16.         END IF;
  17.      END IF;
  18.      RETURN NEW;
  19. END;
  20. $body$
  21. LANGUAGE 'plpgsql'
  22. VOLATILE
  23. CALLED ON NULL INPUT
  24. SECURITY INVOKER
  25. COST 100;

lo que hace este procedimiento es al realizar una actualización sobre los 3 campos del primer IF, este va guardar ese cambio en otra tabla.

es decir las instrucciones NEW y OLD te permiten manipular lo que acabas de introducir(NEW) y lo que tenias antes de que hicieras el cambio con (OLD).

ELSE sirve para evitar que se eliminen registros de la tabla.

y el return NEW fuera de los if es para cuando se realiza una modificación en un campo diferente a los mencionados.


Espero que te sirva.......

Etiquetas: insert, manipular, plpgsql, select
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 18:48.