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

un trigger q llama a varias funciones

Estas en el tema de un trigger q llama a varias funciones en el foro de Bases de Datos General en Foros del Web. holas a todos como estan mieren puestengo un pequeño lio con triggers generales aqui les va mi duda espero me puedan ayudar tengo una funcion ...
  #1 (permalink)  
Antiguo 20/05/2005, 10:11
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
un trigger q llama a varias funciones

holas a todos como estan mieren puestengo un pequeño lio con triggers generales aqui les va mi duda espero me puedan ayudar tengo una funcion x q calcula salario y montos, y otra q me controla los presupuestos es caso es q ambas tienen se ser ejecutadas cuando se dispare un trigger pero no se como hacerlo el codigo es el siguiente:

Código PHP:
CREATE FUNCTION ctrl_presup () RETURNS TRIGGER AS '
BEGIN
    --controlando
    if (new.monto_ejecutado>new.monto_presupuesto)
    THEN
                RAISE EXCEPTION ''no puede haber un monto presupuestado  mayor al ejecutado'';
            END IF;    
            RETURN NEW;
    END;
LANGUAGE 'plpgsql';

CREATE FUNCTION ctrl_presp_finan_rec_eco () RETURNS TRIGGER AS '
DECLARE
    presp integer;
BEGIN
    SELECT e.presupuesto 
    FROM entidadfinanciera e,recursoeconomico r 
    WHERE e.cod_entidad_finan=r.cod_entidad_finan AND e.cod_entidad_finan = new.cod_entidad_finan;
    presp=presupuesto;

    --controlando que coinsidan los montos presupuestados 
    if (new.monto_presupuesto!=presp)
    then new.monto_presupuesto=pres;
    end if;
        RETURN NEW;
    END;
LANGUAGE 'plpgsql';

REATE TRIGGER ctrl_presp_finan_rec_eco BEFORE INSERT OR UPDATE ON recursoeconomico
    
[COLOR=Black]FOR EACH ROW EXECUTE PROCEDURE ctrl_presp_finan_rec_eco();
    FOR 
EACH ROW EXECUTE PROCEDURE ctrl_presup();[/COLOR
como veran el unico problema q tengo es al hacer corre las lines for each, gracias a todos
suerte
  #2 (permalink)  
Antiguo 20/05/2005, 21:10
Avatar de axel_mdq  
Fecha de Ingreso: mayo-2004
Ubicación: Mar del Plata
Mensajes: 157
Antigüedad: 20 años
Puntos: 0
Cita:
como veran el unico problema q tengo es al hacer corre las lines for each
Lo que necesitarias es un CURSOR.
__________________
Saludos,

Alejandro. :adios:
  #3 (permalink)  
Antiguo 21/05/2005, 05:49
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
si me podrias explicar mas como usarlo pasando me una referencia en mi ejemplo te estaria mas q agradecido de todas formas averiguare sobre cursores haber si logro arreglar mi problema
gracias
  #4 (permalink)  
Antiguo 22/05/2005, 15:17
Avatar de axel_mdq  
Fecha de Ingreso: mayo-2004
Ubicación: Mar del Plata
Mensajes: 157
Antigüedad: 20 años
Puntos: 0
Lo que podría darte es un ejemplo de cursor (se encuentra en los libros en pantalla del SQL).
Código:
SET NOCOUNT ON

DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
   @message varchar(80), @title varchar(80)

PRINT "-------- Utah Authors report --------"

DECLARE authors_cursor CURSOR FOR 
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id

OPEN authors_cursor

FETCH NEXT FROM authors_cursor 
INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN
   PRINT " "
   SELECT @message = "----- Books by Author: " + 
      @au_fname + " " + @au_lname

   PRINT @message

   -- Declare an inner cursor based   
   -- on au_id from the outer cursor.

   DECLARE titles_cursor CURSOR FOR 
   SELECT t.title
   FROM titleauthor ta, titles t
   WHERE ta.title_id = t.title_id AND
   ta.au_id = @au_id   -- Variable value from the outer cursor

   OPEN titles_cursor
   FETCH NEXT FROM titles_cursor INTO @title

   IF @@FETCH_STATUS <> 0 
      PRINT "         <<No Books>>"     

   WHILE @@FETCH_STATUS = 0
   BEGIN
      
      SELECT @message = "         " + @title
      PRINT @message
      FETCH NEXT FROM titles_cursor INTO @title
   
   END

   CLOSE titles_cursor
   DEALLOCATE titles_cursor
   
   -- Get the next author.
   FETCH NEXT FROM authors_cursor 
   INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
Primero al cursor lo "llenas" con una consulta. Luego lo podes recorrer registro por registro. Para acceder a los campos lo haces con las variables @Campo.
Espero que te haya ayudado algo.

PD: Disculpá que no use un ejemplo con tu problema, pero entenderás que me llevaría un tiempo leerlo, luego entender lo que queres que hacer y por último un tiempo mayor escribir el código.
__________________
Saludos,

Alejandro. :adios:
  #5 (permalink)  
Antiguo 22/05/2005, 16:42
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
bueno no te preocupes lo leere gracias de todas formas se q me sera de mucha ayuda, y es asi quiero q se genera linea tras linea, pero una preguntita mas con trigger no se podria hacer algo similar por q lo q tengo q hacer es en postgresql
gracias
  #6 (permalink)  
Antiguo 22/05/2005, 19:16
Avatar de axel_mdq  
Fecha de Ingreso: mayo-2004
Ubicación: Mar del Plata
Mensajes: 157
Antigüedad: 20 años
Puntos: 0
No conozco postgresql, pero en MSSQL podes implementar un cursor dentro de un trigger.
__________________
Saludos,

Alejandro. :adios:
  #7 (permalink)  
Antiguo 24/05/2005, 05:56
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
ok gracias por la aclaracion tratare de implementar el cursor
suerte
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 14:14.