Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

312
Vistas
Crear un disparador en postgresql

Tengo un problema con mi gatillo:

 CREATE OR REPLACE FUNCTION process_fillDerivedFrom_used() RETURNS TRIGGER AS $fillDerivedFrom_used$ DECLARE prog varchar(255); current varchar(255); BEGIN SELECT u.iduseentity as prog ,g.idCreatedEntity as current FROM entity e JOIN used u ON e.identity=u.iduseentity JOIN activity a ON a.idactivity=u.idusedactivity JOIN generatedby g ON g.idcreatoractivity=a.idactivity INSERT INTO DERIVEDFROM VALUES (prog,current) END; $fillDerivedFrom_used$ LANGUAGE plpgsql; CREATE TRIGGER fillDerivedFrom_used AFTER INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW EXECUTE PROCEDURE process_fillDerivedFrom_used();

Uso 3 tablas, la consulta es correcta, así que creo que el error no viene de aquí. Pero cuando copio más allá de este disparador en mi terminal, no pasa nada, no hay mensaje de error, puedo escribir en la terminal pero no puedo ejecutar ninguna consulta, como si hubiera olvidado algo en mi disparador, así que creo que no está completamente creado, creo.

Creo que mezclo 2 lenguajes PL/SQL que aprendí en la escuela y el postgresql.

Gracias por tu ayuda

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No se que problemas tienes. Uno es obvio. as no se utiliza para variables; into es. Además, debe nombrar las variables para que no entren en conflicto con los nombres de las columnas:

 CREATE OR REPLACE FUNCTION process_fillDerivedFrom_used() RETURNS TRIGGER AS $fillDerivedFrom_used$ DECLARE prog v_varchar(255); current v_varchar(255); BEGIN SELECT u.iduseentity as prog, g.idCreatedEntity as current INTO v_proc, v_current FROM entity e JOIN used u ON e.identity = u.iduseentity JOIN activity a ON a.idactivity = u.idusedactivity JOIN generatedby g ON g.idcreatoractivity = a.idactivity INSERT INTO DERIVEDFROM VALUES (v_prog, v_current) END;

Por supuesto, esto plantea la pregunta de por qué está usando variables:

 CREATE OR REPLACE FUNCTION process_fillDerivedFrom_used() RETURNS TRIGGER AS $fillDerivedFrom_used$ BEGIN INSERT INTO DERIVEDFROM (prog, current) -- or whatever the column names are SELECT u.iduseentity as prog, g.idCreatedEntity as current FROM entity e JOIN used u ON e.identity = u.iduseentity JOIN activity a ON a.idactivity = u.idusedactivity JOIN generatedby g ON g.idcreatoractivity = a.idactivity; END;
over 4 years ago · Santiago Trujillo Denunciar

0

Lo he hecho y funciona, ¡gracias por tu ayuda!

 CREATE OR REPLACE FUNCTION process_fillDerivedFromGenby() RETURNS TRIGGER AS $fillDerivedFromgenby$ DECLARE prog varchar(255); curent varchar(255); BEGIN SELECT u.iduseentity , g.idCreatedEntity into prog,curent FROM entity e JOIN used u ON e.identity=u.iduseentity JOIN activity a ON a.idactivity=u.idusedactivity JOIN generatedby g ON g.idcreatoractivity=a.idactivity WHERE g.idCreatedEntity =NEW.idCreatedEntity; --raise notice 'curent: "%" prog by "%"', curent, prog; INSERT INTO DERIVEDFROM VALUES(prog,curent); return new; END; $fillDerivedFromgenby$ LANGUAGE plpgsql; CREATE TRIGGER fillDerivedFromgenby AFTER INSERT ON GENERATEDBY FOR EACH ROW EXECUTE PROCEDURE process_fillDerivedFromGenby();
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda