Foro de elhacker.net

Programación => 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
  1. CREATE TABLE `Clientes`(
  2.   `Codigo` INT NOT NULL,
  3.   `Nombre` VARCHAR(50) NOT NULL,
  4.   `Estado` TINYINT NULL,
  5.   PRIMARY KEY(`Codigo`)
  6. );

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
  1. CREATE OR REPLACE TRIGGER ClienteBaja
  2. BEFORE DELETE ON Clientes
  3. FOR EACH ROW
  4. BEGIN
  5.    INSERT INTO Cambios(:OLD.Codigo, :OLD.Nombre, "No quiere pagar tanto el rata",SYSDATE);
  6. 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