Ayuda con trigger

Iniciado por juan_1, 6 Noviembre 2018, 20:32 PM

0 Miembros y 1 Visitante están viendo este tema.

juan_1

Tengo estas tablas:
create table clientes (
codigo varchar2(2) primary key,
nombre varchar2(50));

create table pedidos (
cliente varchar2(2),
producto varchar2(20),
cantidad int check(cantidad>0),
foreign key (producto) references producto(nombre),
foreign key (cliente) references clientes(codigo));
y otra tabla a mayores llamada CAMBIOS que es donde insertaré el mensaje, con 4 campos.

Crea un nuevo trigger llamado FD_CLIENTE que:
- creará un nuevo registro en CAMBIOS por cada uno de los clientes
que se den de baja.
- en el campo TIPO almacenará el texto " se ha realizado una baja del
cliente clave con nombre nombre"
- en el campo MOMENTO se almacenará la fecha y la hora en la que
se ha producido

Hemos empezado a ver los trigger y no se muy bien como insertar un nuevo registro por cada cliente que se de de baja

Shell Root

En la tabla de clientes debe de existir ese cambio, es decir, un campo tipo bit o booleano.
Ejemplo:
Código (sql) [Seleccionar]
CREATE TABLE `Clientes`(
   `Codigo` INT NOT NULL,
   `Nombre` VARCHAR(50) NOT NULL,
   `Estado` TINYINT NULL,
   PRIMARY KEY(`Codigo`)
);


El tigger debe de disparar cuando cambie de TRUE a FALSE el cliente. Para identificar cuando se da de baja.

No soy bueno en esto, así que espera a que alguien más de ayude  :silbar:
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Tordur

Buenas, si he entendido bien lo que pides, es que cuando se elimine un cliente de la tabla Clientes se ponga un registro en Cambios respecto al cliente.

Como no se que 4 campos tiene Cambios voy a suponer que son clientes.codigo, clientes.nombre, un mensaje personalizado y el tiempo al darse de baja.

Mi idea es la siguiente:

Código (sql) [Seleccionar]
CREATE OR REPLACE TRIGGER ClienteBaja
BEFORE DELETE ON Clientes
FOR EACH ROW
Begin
    INSERT INTO Cambios(:Old.Codigo, :Old.Nombre, "No quiere pagar tanto el rata",SYSDATE);
END;


Como te digo no se los campos que quieres usar, el mensaje seria generico para todos, pero con esto ya puedes empezar a hacerlo tuyo.

PD: Si alguien que sepa mas que yo ve algo mal corregirme. Gracias