Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: juan_1 en 6 Noviembre 2018, 20:32 PM

Título: Ayuda con trigger
Publicado por: juan_1 en 6 Noviembre 2018, 20:32 PM
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
Título: Re: Ayuda con trigger
Publicado por: Shell Root en 6 Noviembre 2018, 20:38 PM
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:
Título: Re: Ayuda con trigger
Publicado por: Tordur en 17 Diciembre 2018, 23:00 PM
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