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

Incapaz de hacer un Trigger. (Ayuda)

Estas en el tema de Incapaz de hacer un Trigger. (Ayuda) en el foro de Oracle en Foros del Web. Hola, Tengo que hacer un disparador que al insertar un pedido relacionado con el presupuesto de un cliente, el atributo con_pedido de ese cliente cambie ...
  #1 (permalink)  
Antiguo 27/03/2009, 06:20
Avatar de Raskol  
Fecha de Ingreso: octubre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Incapaz de hacer un Trigger. (Ayuda)

Hola,

Tengo que hacer un disparador que al insertar un pedido relacionado con el presupuesto de un cliente, el atributo con_pedido de ese cliente cambie a si.

Las tablas implicadas son las siguientes:

CREATE TABLE Cliente (
email VARCHAR2(20) NOT NULL,
nombre VARCHAR2(20) NOT NULL,
con_pedido VARCHAR2(20) NOT NULL
CHECK (con_pedido IN ('S', 'N')),
telefono VARCHAR2(9) NULL,
direccion VARCHAR2(40) NULL,
nif VARCHAR2(20) NULL,
PRIMARY KEY (email)
);

CREATE TABLE Presupuesto (
codigo_presupuesto VARCHAR2(20) NOT NULL,
email VARCHAR2(20) NULL,
fecha DATE NOT NULL,
precio_total INTEGER NOT NULL,
formalizado VARCHAR2(20) NOT NULL
CHECK (formalizado IN ('S', 'N')),
PRIMARY KEY (codigo_presupuesto),
FOREIGN KEY (email)
REFERENCES Cliente
);

CREATE TABLE Pedido (
codigo_presupuesto VARCHAR2(20) NOT NULL,
direccion_montaje VARCHAR2(40) NULL,
fecha_pedido DATE NOT NULL,
fecha_provisional DATE NOT NULL,
PRIMARY KEY (codigo_presupuesto),
FOREIGN KEY (codigo_presupuesto)
REFERENCES Presupuesto
ON DELETE CASCADE
);

Lo que quiero hacer y soy incapaz es: cuando inserto en pedido, mirar el cliente que tiene asociado el presupuesto de ese pedido, y ponerle el valor de con_pedido:='S'

Muchas gracias.
  #2 (permalink)  
Antiguo 28/03/2009, 07:39
Avatar de Raskol  
Fecha de Ingreso: octubre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: Incapaz de hacer un Trigger. (Ayuda)

Bueno después de leer y releer creo que ya he comprendido un poco pl/sql, para el que le pueda interersar he utilizado lo siguiente:

Código:
CREATE OR REPLACE TRIGGER Cliente_registrado
BEFORE INSERT ON PEDIDO FOR EACH ROW
Declare
	emailCliente presupuesto.email%type;	
begin
	-- seleccionamos el email del cliente al que se asocia el pedido.
	select email into emailCliente from presupuesto where codigo_presupuesto=:new.codigo_presupuesto;
	-- Actualizamos el valor del cliente con dicho email a S.
	update cliente set con_pedido='S' where cliente.email=emailCliente;
END;
/
Creo que está bien. Un saludo.
  #3 (permalink)  
Antiguo 07/04/2009, 10:59
 
Fecha de Ingreso: junio-2004
Ubicación: Valdivia
Mensajes: 24
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Incapaz de hacer un Trigger. (Ayuda)

no lo compile, pero nose es una idea..
suponiendo que si inserto un pedido, este busque el codigo_presupuesto realcionado y de ahi saque el email para buscar el cliente indicado y actualizar su atributo....

Código:
create or replace trigger TG_INS_PEDIDO
  before insert on pedido  
  for each row
declare
  -- local variables here
begin
  update   cliente
  set      con_pedido = 's'
  where    email in (select  p.email 
                     from    presupuesto p
                     where   p.codigo_presupuesto = :new.codigo_presupuesto
                    );
end TG_INS_PEDIDO;
te faltaria hacer el trigger para eliminar... pero vamos ese hazlo tu, tampoco estaba dificil el de insertar.

saludos
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 03:22.