es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo crear una función y un desencadenador en SQL Developer?

Tienes la siguiente base de datos:

  • Customer (customerNO, customerName, address, city, category, custBalance)
  • Product (productNO, label, price, QStock)
  • CustomerOrder (orderNO, orderDate, #customerNO)
  • OrderedProduct (#orderNO, #productNO, orderQuantity)

Quieres crear un trigger llamado “changeCustomer_Category” que será invocado antes de cualquier actualización de la tabla “customer” en la base de datos. El trabajo de este trigger es modificar la categoría de un cliente de B2 a B1 y de C2 a C1 cuando el balance del cliente cae por debajo de un cierto umbral (-10000).

Has intentado esto pero no funciona:

CREATE or REPLACE TRIGGER changeCustomer_Category
    AFTER update ON customer
    FOR EACH ROW
    ENABLE
    DECLARE 

   BEGIN


    END;
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear un disparador llamado changeCustomer_Category, que modifique la categoría de un cliente de B2 a B1 y de C2 a C1 cuando el estado de saldo de un cliente caiga por debajo de un umbral determinado (-10000), se puede utilizar el siguiente código:

    CREATE OR REPLACE TRIGGER changeCustomer_Category
    BEFORE UPDATE ON customer 
    FOR EACH ROW
    WHEN (NEW.custBalance < -10000) 
    BEGIN
        UPDATE customer SET category = 
        CASE 
            WHEN OLD.category = 'B2' THEN 'B1' 
            WHEN OLD.category = 'C2' THEN 'C1' 
            ELSE OLD.category 
        END 
        WHERE customerNO = :NEW.customerNO;
    END;
    

    Este disparador se invocará antes de cualquier actualización del saldo del cliente en la tabla de clientes. Comprobará si el nuevo saldo del cliente es inferior a -10000 y, si lo es, actualizará la categoría del cliente de B2 a B1 y de C2 a C1, respectivamente. Las palabras clave “OLD” y “NEW” se utilizan para hacer referencia a los valores antiguos y nuevos de la fila que se está actualizando. La sintaxis “:NEW.customerNO” se utiliza para hacer referencia al número de cliente actual de la fila.

Comments are closed.