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.

¿Crear procedimiento de SQL Developer?

Tengo la siguiente base de datos:

  • Cliente (customerNO, customerName, address, city, category, custBalance)
  • Producto (productNO, label, price, QStock)
  • PedidoCliente (orderNO, orderDate, #customerNO)
  • ProductoPedido (#orderNO, #productNO, orderQuantity)

y quiero crear estos programas:

El primero es: una función almacenada llamada productPerOrder para devolver el número de productos ordenados para cualquier pedido dado como entrada su número.

El segundo es: un disparador llamado changeCustomer_Category que debería ser invocado antes de cualquier actualización del saldo del cliente en la tabla de clientes. Su tarea es modificar la categoría de un cliente de B2 a B1 y de C2 a C1 cuando el estado de saldo de un cliente cae por debajo de un cierto umbral (-10000).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Función almacenada productPerOrder

    Para crear una función almacenada llamada productPerOrder, necesitamos utilizar la sentencia SELECT para recuperar la cantidad de productos colocados en cualquier pedido cuyo número se proporcione como entrada a la función. Aquí está el código SQL para crear esta función:

    CREATE OR REPLACE FUNCTION productPerOrder(
       in_orderNO INT
    ) RETURN INT
    IS
       v_count INT;
    BEGIN
       SELECT COUNT(*) INTO v_count FROM OrderedProduct WHERE OrderNO = in_orderNO;
       RETURN(v_count);
    END;
    

    Esta función toma un parámetro de entrada in_orderNO que especifica el número de pedido para el cual se debe recuperar la cantidad de productos. Primero declaramos una variable local v_count, que contendrá la cantidad de productos para el número de pedido dado. Luego, utilizamos la sentencia SELECT para recuperar la cantidad de la tabla OrderedProduct y almacenarla en v_count. Finalmente, devolvemos el valor de v_count como resultado de la función.

    Disparador changeCustomer_Category

    Para crear un disparador llamado changeCustomer_Category, necesitamos utilizar el disparador BEFORE UPDATE, que se invocará antes de cualquier actualización del saldo del cliente en la tabla Customer. Aquí está el código SQL para crear este disparador:

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

    Este disparador se activa solo cuando hay una actualización en el campo custBalance de la tabla Customer. Especifica la cláusula BEFORE UPDATE OF custBalance ON Customer. También especificamos la cláusula FOR EACH ROW, lo que significa que el disparador se ejecutará una vez por cada fila afectada por la sentencia de actualización.

    Dentro del disparador, verificamos si el valor antiguo de custBalance es menor que -10000 y la categoría anterior es ‘B2’ o ‘C2’. Si esta condición es verdadera, modificamos el valor de la nueva categoría a ‘B1’ o ‘C1’, según el valor de la categoría anterior. Utilizamos la sentencia CASE para verificar el valor de la categoría anterior y asignar el valor de la nueva categoría en consecuencia.

    Tenga en cuenta que modificamos el campo :NEW.category, lo que significa que el valor de la categoría actualizada se almacenará en la tabla Customer después de la sentencia de actualización.

Comments are closed.