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

Cambiar un trigger en Postgree a Oracle

Estas en el tema de Cambiar un trigger en Postgree a Oracle en el foro de Oracle en Foros del Web. Muchachos buenas tardes, necesito un favor urgente tengo el siguiente script en potsgree y necesito cambiarlo a oracle. Script... Código PHP: CREATE  OR  REPLACE  FUNCTION  ...
  #1 (permalink)  
Antiguo 15/07/2009, 14:22
 
Fecha de Ingreso: febrero-2008
Ubicación: Bogotá_Colombia
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Cambiar un trigger en Postgree a Oracle

Muchachos buenas tardes, necesito un favor urgente tengo el siguiente script en potsgree y necesito cambiarlo a oracle.

Script...

Código PHP:
CREATE OR REPLACE FUNCTION consultaexterna.actualizar_servicios_cita()
RETURN 
TRIGGER AS 
    DECLARE 
         
registro record
 IF 
TG_OP 'UPDATE' THEN  
        SELECT 
          a
.fecha,  
          
substr(a.hora_inicio || '',0,6) AS hora_inicio
          
substr(a.hora_fin||'',0,6) AS hora_fin
          
c.estado_cita
          
c.codigo_agenda
          INTO registro     BEGIN  
   
          FROM cita c INNER JOIN agenda a ON 
(c.codigo_agenda=a.codigo
          
WHERE c.codigo= NEW.codigo;            
          
UPDATE servicios_cita SET 
            fecha_cita
=registro.fecha
            
hora_inicio_cita=registro.hora_inicio
            
hora_fin_cita=registro.hora_fin
            
estado_cita=registro.estado_cita
            
codigo_agenda=registro.codigo_agenda
        WHERE codigo_cita
= NEW.codigo
        
END IF; 
    RETURN 
NULL;  
END;   

CREATE OR REPLACE TRIGGER trig_upd_cita_serv_cita  
AFTER INSERT 
OR UPDATE ON consultaexterna.cita 
FOR EACH ROW EXECUTE PROCEDURE consultaexterna.actualizar_servicios_cita() 


mil gracias a todos los que me colaboren por adelantado...
  #2 (permalink)  
Antiguo 16/07/2009, 07:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cambiar un trigger en Postgree a Oracle

Viejo Diego... como va?

En cuanto a este trigger, debe hacer ciertos cambios.
1. Declaración del trigger
En postgres, Un trigger debe ser declarado como función con parametro de retorno un trigger, posterior a su creación, debe crearse el trigger, disparando la respectiva función o procedimiento.
En oracle, dicha función se crea dentro del trigger en un solo bloque.
2. cambiar TG_OP
TG_OP en postgres, es una variable que almacena el evento que se ha ejecutado en el trigger. Para el caso de oracle, creo que se puede suplir por las sentencias inserting, updating o deleting.
3. Variable Record
He leído por encima y Oracle parece soportarlas, pero no conozco la sintaxis de su uso. En postgresql, en una variable record, se pueden almacenar los valores de varios campos de un registro de una consulta determinada. La sintaxis es como la ve en el trigger que ha puesto.
Este mismo problema, se puede suplir con el uso de cursores, recorriendo la consulta y almacenando los valores de los campos.

El resto del codigo, tiende a ser muy compatible entre ambos sistemas.

Espero haber ayudado.

__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 16/07/2009 a las 12:22
  #3 (permalink)  
Antiguo 31/07/2009, 10:26
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Cambiar un trigger en Postgree a Oracle

Lo que no entiendo es porq colocas en trigger cuando inserte si nunca haces nada cuando insertas un registro

create or replace trigger trig_upd_cita_serv_cita
after INSERT OR UPDATE ON consultaexterna.cita --no recuerdo si es asi o
for each row
begin


if(updating)then
if (:old.codigo=:new.codigo) then

UPDATE servicios_cita SET
fecha_cita=:new.fecha,
hora_inicio_cita=:new.hora_inicio,
hora_fin_cita=:new.hora_fin,
estado_cita=:new.estado_cita,
codigo_agenda=:new.codigo_agenda
WHERE codigo_cita= NEW.codigo;

end if;
end if;

end;
/



Espero que te funcione
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 06:54.