Guía 03a
1 Resumen
1.1 Tipos de Datos
NUMBER
: puede almacenar enteros o decimalesINTEGER
: sub-tipo de NUMBER. Solo almacena enterosNVARCHAR2(size)
: cadena de caracteres de longitud variableDATE
: almacena fechas y horasBOOL
: booleano. Verdadero o Falso
1.2 Declarar variables
Se utiliza el bloque DECLARE
Ejemplo 01: Crear una variable ‘numero’ con valor 15
DECLARE
NUMBER :=15; v_numero
Ejemplo 02: Declara una variable de cada tipo
DECLARE
INTEGER := 20;
v_numero VARCHAR2(50) := 'Hola, PL/SQL';
v_texto DATE := SYSDATE;
v_fecha BOOLEAN := TRUE; v_booleano
1.3 Imprimir en pantalla
- Se utiliza la instrucción
DBMS_OUTPUT.PUT_LINE('hola mundo')
- Cuando se quiere juntar texto y variables, se concatena utilizando el simbolo
||
Ejemplo: Crea una variable de valor 20, e imprimela en pantalla
DECLARE
INTEGER := 20;
v_numero BEGIN
'La variable es: ' || v_numero);
DBMS_OUTPUT.PUT_LINE(END;
1.4 If-Else
Se utiliza para ejecutar diferentes bloques de código según si una condición es verdadera o falsa.
Estructura Básica
IF condición THEN
-- código si condición es verdadera
END IF;
Estructura con ELSE
IF condición THEN
-- código si condición es verdadera
ELSE
-- código si condición es falsa
END IF;
Estructura con múltiples condiciones
IF condición1 THEN
-- código si condicion1 es verdadera
ELSIF condición2 THEN
-- código si condicion2 es verdadera
ELSE
-- código si todas las condiciones anteriores son falsas
END IF;
1.5 Procedimientos
- Bloques de código que permiten agrupar lógica y operaciones, para así reutilizarlas
- Similares a las funciones, pero no devuelven un valor
Estructura
CREATE OR REPLACE PROCEDURE sp_nombreproc (--parámetros)
IS
-- Declaración de variables
BEGIN
-- Cuerpo del procedimiento
-- Lógica del procedimiento
END;
1.5.1 Ejemplo 01
Supongamos que tenemos una tabla llamada Empleados
CREATE TABLE Empleados (
ID NUMBER PRIMARY KEY,
VARCHAR2(100),
Nombre NUMBER
Salario );
Nos piden crear un procedimiento sp_nuevoEmpleado
que ingrese un nuevo empleado en la tabla Empleados
CREATE OR REPLACE PROCEDURE sp_nuevoEmpleado (
IN NUMBER,
p_ID IN VARCHAR2,
p_Nombre IN NUMBER
p_Salario
) IS
BEGIN
INSERT INTO Empleados (ID, Nombre, Salario)
VALUES (p_id, p_Nombre, p_Salario);
END;
Luego para ejecutarlo, se ejecuta el siguiente código
BEGIN
1, 'Juan Pérez', 50000);
sp_nuevoEmpleado(2, 'Ana Gómez', 60000);
sp_nuevoEmpleado(END;
Finalmente se corrobora si funcionó el procedimiento
SELECT *
FROM Empleados;
2 Ejercicios 2024-09-30
Script.sql
script: 20240930.sql
-- Crear tabla Clientes
CREATE TABLE Clientes (
NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
ClienteID VARCHAR2(50),
Nombre VARCHAR2(50),
Apellido VARCHAR2(100),
Email VARCHAR2(20),
Telefono DATE
FechaRegistro
);
-- Crear tabla Productos
CREATE TABLE Productos (
NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
ProductoID VARCHAR2(100),
NombreProducto NUMBER(10, 2),
Precio NUMBER
Stock
);
-- Crear tabla Ventas
CREATE TABLE Ventas (
NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
VentaID NUMBER,
ClienteID DATE,
FechaVenta NUMBER(10, 2),
TotalVenta FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID)
);
-- Crear tabla DetallesVentas
CREATE TABLE DetallesVentas (
NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
DetalleID NUMBER,
VentaID NUMBER,
ProductoID NUMBER,
Cantidad NUMBER(10, 2),
TotalLinea FOREIGN KEY (VentaID) REFERENCES Ventas(VentaID),
FOREIGN KEY (ProductoID) REFERENCES Productos(ProductoID)
);
-- Insertar datos en Clientes
INSERT INTO Clientes (Nombre, Apellido, Email, Telefono, FechaRegistro)
VALUES ('Juan', 'Pérez', 'juan.perez@example.com', '123456789', SYSDATE);
INSERT INTO Clientes (Nombre, Apellido, Email, Telefono, FechaRegistro)
VALUES ('Ana', 'López', 'ana.lopez@example.com', '987654321', SYSDATE);
INSERT INTO Clientes (Nombre, Apellido, Email, Telefono, FechaRegistro)
VALUES ('Carlos', 'Ramírez', 'carlos.ramirez@example.com', '555111222', SYSDATE);
-- Insertar datos en Productos
INSERT INTO Productos (NombreProducto, Precio, Stock)
VALUES ('Laptop', 1200, 10);
INSERT INTO Productos (NombreProducto, Precio, Stock)
VALUES ('Smartphone', 800, 15);
INSERT INTO Productos (NombreProducto, Precio, Stock)
VALUES ('Televisor', 1000, 7);
-- Insertar datos en Ventas
INSERT INTO Ventas (ClienteID, FechaVenta, TotalVenta)
VALUES (1, SYSDATE, 1200);
INSERT INTO Ventas (ClienteID, FechaVenta, TotalVenta)
VALUES (2, SYSDATE, 1600);
-- Insertar datos en DetallesVentas
INSERT INTO DetallesVentas (VentaID, ProductoID, Cantidad, TotalLinea)
VALUES (1, 1, 1, 1200);
INSERT INTO DetallesVentas (VentaID, ProductoID, Cantidad, TotalLinea)
VALUES (2, 2, 1, 800);
INSERT INTO DetallesVentas (VentaID, ProductoID, Cantidad, TotalLinea)
VALUES (2, 3, 1, 1000);
2.1 Ejercicio 01
Cálculo de Bonificación
Crea un procedimiento almacenado llamado sp_CalcularBonificación
que reciba el salario de un empleado y calcule su bonificación. La bonificación será del 10% si el salario es menor a 1000, y del 5% si es mayor o igual a 1000. El procedimiento debe imprimir el salario con bonificación.
Solución
CREATE OR REPLACE PROCEDURE sp_CalcularBonificacion (
NUMBER;
p_Salario
)IS
NUMBER;
v_Bonificacion NUMBER;
v_SalarioTotal BEGIN
IF p_Salario < 1000 THEN
:= 0.10 * p_Salario;
v_Bonificacion ELSE
:= 0.05 * p_Salario;
v_Bonificacion END IF;
:= p_Salario + v_Bonificacion;
v_SalarioTotal 'El salario total con bonificación es: ' || v_SalarioTotal);
DBMS_OUTPUT.PUT_LINE(END;
Descripción
- Crear el Procedimiento:
- Se utiliza
CREATE OR REPLACE PROCEDURE
para definir el procedimiento llamadosp_CalcularBonificacion
que toma un parámetrop_Salario
de tipoNUMBER
.
- Se utiliza
- Declarar Variables Locales:
- Se declaran dos variables:
v_Bonificacion
: Para almacenar el valor calculado de la bonificación.v_SalarioTotal
: Para almacenar el salario total (salario + bonificación).
- Condición para Calcular la Bonificación:
- Se evalúa el valor del parámetro
p_Salario
: - Si es menor a 1000, se asigna el 10% del salario a
v_Bonificacion
. - Si es mayor o igual a 1000, se asigna el 5% del salario a
v_Bonificacion
.
- Se evalúa el valor del parámetro
- Calcular el Salario Total:
- El salario total (
v_SalarioTotal
) se obtiene sumando el salario original (p_Salario
) y la bonificación calculada (v_Bonificacion
).
- El salario total (
- Imprimir el Resultado:
- El procedimiento utiliza
DBMS_OUTPUT.PUT_LINE
para mostrar el salario total con bonificación.
- El procedimiento utiliza
- Finalización del Procedimiento:
- El procedimiento finaliza correctamente sin retornar ningún valor (ya que la salida se imprime directamente).
2.2 Ejercicio 02
Verificar si un Número es Par o Impar
Crear un bloque PL/SQL que verifique si un número es par o impar e imprima el mensaje correspondiente
Solución
DECLARE
NUMBER := 10;
v_numero BEGIN
IF v_numero MOD 2 = 0 THEN
'El número ' || v_numero || ' es par');
DBMS_OUTPUT.PUT_LINE(ELSE
'El número ' || v_numero || ' es impar');
DBMS_OUTPUT.PUT_LINE(END IF;
END;
Descripción
- Declaración de Variables:
- Se declara la variable
v_numero
de tipoNUMBER
y se inicializa con el valor10
. - La variable
v_numero
será el número que se verificará para saber si es par o impar.
- Se declara la variable
- Condicional IF-ELSE:
- Se utiliza la estructura
IF
para verificar si v_numero es par o impar. v_numero MOD 2 = 0
es la condición que evalúa si el número es par:- Si la condición es verdadera, el residuo de la división del número por 2 es 0, lo que significa que el número es par. En este caso, se imprime el mensaje que indica que el número es par.
- Si la condición es falsa (cuando el residuo es distinto de 0), el número es impar y se imprime el mensaje correspondiente.
- Se utiliza la estructura
- Impresión del Resultado:
- Dependiendo de si el número es par o impar, se ejecuta
DBMS_OUTPUT.PUT_LINE
para mostrar el mensaje adecuado en la consola de salida.
- Dependiendo de si el número es par o impar, se ejecuta
2.3 Ejercicio 03
Contar Productos en Stock Bajo
Crea un procedimiento almacenado llamado sp_ContarProductosBajoStock
que cuente cuántos productos tienen un stock menor a 5. Imprime el total de productos con stock bajo
Solución
CREATE OR REPLACE PROCEDURE sp_ContarProductosBajoStock
IS
NUMBER;
v_ProductosBajoStock BEGIN
SELECT COUNT(*) INTO v_ProductosBajoStock
FROM Productos
WHERE Stock < 5;
'Total de productos bajo stock: ' || v_ProductosBajoStock);
DBMS_OUTPUT.PUT_LINE(END
Descripción
- Declaración del Procedimiento:
- Se utiliza
CREATE OR REPLACE PROCEDURE
para definir un procedimiento llamadosp_ContarProductosBajoStock
. Esto significa que si ya existe un procedimiento con ese nombre, será reemplazado.
- Se utiliza
- Declaración de Variables:
- Se declara una variable local llamada
v_ProductosBajoStock
de tipoNUMBER
. Esta variable se utilizará para almacenar el conteo de productos con un stock menor a 5.
- Se declara una variable local llamada
- Inicio del Bloque:
- El bloque
BEGIN
indica el inicio de las instrucciones que se ejecutarán cuando se llame al procedimiento.
- El bloque
- Consulta SQL:
- La instrucción
SELECT COUNT(*) INTO v_ProductosBajoStock
se utiliza para contar cuántos productos hay en la tablaProductos
que tienen un Stock menor a 5. El resultado de esta consulta se almacena en la variablev_ProductosBajoStock
.
- La instrucción
- Impresión del Resultado:
- Se utiliza
DBMS_OUTPUT.PUT_LINE
para imprimir el total de productos con stock bajo en la consola de salida. La cadena impresa incluye el valor almacenado env_ProductosBajoStock
.
- Se utiliza
- Finalización del Procedimiento:
- El bloque
END
; indica el final del procedimiento.
- El bloque
2.4 Ejercicio 04
Actualizar Precio de Productos
Crea un procedimiento almacenado llamado sp_ActualizarPrecioProducto
que reciba el ID del producto y un porcentaje de incremento, y actualice el precio del producto incrementándolo en ese porcentaje. Imprime el nuevo precio del producto.
Solución
CREATE OR REPLACE PROCEDURE sp_ActualizarPrecioProducto (
NUMBER;
p_ID NUMBER;
p_Porcentaje
)IS
NUMBER;
v_PrecioActual NUMBER;
v_NuevoPrecio BEGIN
-- obtener precio actual
SELECT Precio INTO v_PrecioActual
FROM Productos
WHERE ProductoID = p_ID;
-- calcular nuevo precio
:= v_PrecioActual + (1 + p_Porcentaje / 100 );
v_NuevoPrecio
-- actualizar precio
UPDATE Productos
SET Precio = v_NuevoPrecio
WHERE ProductoID = p_ID;
'El nuevo precio del producto con ID: ' || p_ID || ' es ' || v_NuevoPrecio);
DBMS_OUTPUT.PUT_LINE(END;
Descripción
- Declaración del Procedimiento:
- Se utiliza
CREATE OR REPLACE PROCEDURE
para definir un procedimiento almacenado llamadosp_ContarProductosBajoStock
. Esto permite que, si el procedimiento ya existe, se reemplace por la nueva definición.
- Se utiliza
- Declaración de Variables:
IS
: Esta palabra clave se utiliza para iniciar la sección de declaraciones del procedimiento.v_ProductosBajoStock NUMBER;
: Se declara una variable local llamadav_ProductosBajoStock
de tipoNUMBER
. Esta variable almacenará el número total de productos cuyo stock es menor a 5.
- Inicio del Bloque:
BEGIN
: Esta palabra clave indica el inicio del bloque de instrucciones que se ejecutarán cuando se invoque el procedimiento.
- Consulta SQL:
SELECT COUNT(*) INTO v_ProductosBajoStock
: Esta línea realiza una consulta SQL que cuenta todas las filas de la tabla Productos que cumplen con la condición especificada.FROM Productos
: Especifica que se está consultando la tabla llamada Productos.WHERE Stock < 5;
: Esta condición filtra los productos, seleccionando solo aquellos cuyo stock es menor a 5. El resultado del conteo se almacena en la variablev_ProductosBajoStock
.
- Impresión del Resultado:
DBMS_OUTPUT.PUT_LINE('Total de productos bajo stock: ' || v_ProductosBajoStock);
: Esta línea imprime el resultado en la consola. Se utilizaDBMS_OUTPUT.PUT_LINE
para mostrar un mensaje que incluye el total de productos con stock bajo, concatenando el texto con el valor almacenado env_ProductosBajoStock
.
- Finalización del Procedimiento:
END;
: Esta palabra clave indica el final del procedimiento. No se devuelve un valor, ya que la salida se muestra directamente en la consola.
2.5 Ejercicio 05
Calcular el Salario Promedio de Empleados
Crea un procedimiento almacenado llamado sp_CalcularSalarioPromedio
que calcule el salario promedio de los empleados de la tabla Empleados. Imprime el salario promedio.
Solución
CREATE OR REPLACE PROCEDURE sp_CalcularSalarioPromedio
IS
NUMBER;
v_SalarioPromedio BEGIN
SELECT AVG(Salario) INTO v_SalarioPromedio
FROM Empleados;
'El salario promedio es: ' || v_SalarioPromedio);
DBMS_OUTPUT.PUT_LINE(END;
Descripción
- Declaración del Procedimiento:
CREATE OR REPLACE PROCEDURE sp_CalcularSalarioPromedio
: Esta línea define un procedimiento almacenado llamadosp_CalcularSalarioPromedio
. La cláusulaOR REPLACE
indica que, si ya existe un procedimiento con el mismo nombre, se reemplazará por el nuevo.
- Declaración de Variables:
IS
: Esta palabra clave inicia la sección donde se declaran las variables locales que se utilizarán en el procedimiento.v_SalarioPromedio NUMBER;
: Se declara una variable local llamadav_SalarioPromedio
de tipoNUMBER
. Esta variable se utilizará para almacenar el resultado del salario promedio de los empleados.
- Inicio del Bloque:
BEGIN
: Esta palabra clave indica el inicio del bloque de código que se ejecutará cuando se llame al procedimiento.
- Consulta SQL:
SELECT AVG(Salario) INTO v_SalarioPromedio
: Esta línea realiza una consulta SQL que calcula el promedio de los salarios de todos los empleados en la tabla Empleados. La funciónAVG()
se utiliza para calcular el salario promedio.FROM Empleados;
: Esta cláusula especifica que la consulta se realiza sobre la tabla Empleados.
- Impresión del Resultado:
DBMS_OUTPUT.PUT_LINE('El salario promedio es: ' || v_SalarioPromedio);
: Esta línea imprime el salario promedio calculado en la consola. Se utilizaDBMS_OUTPUT.PUT_LINE
para mostrar un mensaje que concatena el texto con el valor almacenado env_SalarioPromedio
.
- Finalización del Procedimiento:
END;
: Esta palabra clave indica el final del procedimiento. No se devuelve ningún valor, ya que el resultado se muestra directamente en la consola.
2.6 Ejercicio 06
Insertar Nueva Venta
Crea un procedimiento almacenado llamado sp_InsertarVenta
que reciba el ID del cliente, el ID del producto, y la cantidad vendida. Inserta la nueva venta en la tabla Ventas y los detalles en la tabla DetallesVenta
Solución
CREATE OR REPLACE PROCEDURE sp_InsertarVenta (
NUMBER,
p_ClienteID NUMBER,
p_ProductoID NUMBER
p_CantidadVendida
)IS
NUMBER;
v_TotalLinea NUMBER;
v_PrecioProducto NUMBER;
v_VentaID BEGIN
-- obtener precio del producto
SELECT Precio INTO v_PrecioProducto
FROM Productos
WHERE ProductoID = p_ProductoID;
-- calcular total de venta
= v_PrecioProducto * p_CantidadVendida;
v_TotalLinea
-- insertar la venta en tabla Ventas
INSERT INTO Ventas(ClienteID, FechaVenta, TotalVenta)
VALUES (p_ClienteID, SYSDATE, v_TotalLinea)
RETURNING VentaID INTO v_VentaID; -- capturo inmediatamente el valor VentaID
-- insertar detalles de la venta
INSERT INTO DetallesVenta(VentaID, ProductoID, Cantidad, TotalLinea)
VALUES (v_VentaID, p_ProductoID, p_CantidadVendida, v_TotalLinea)
'Venta insertada correctamente con ID: ' || v_VentaID);
DBMS_OUTPUT.PUT_LINE(END;
Descripción
- Declaración del Procedimiento:
CREATE OR REPLACE PROCEDURE sp_InsertarVenta
: Define el procedimiento almacenadosp_InsertarVenta
. Si ya existe, será reemplazado.- Los parámetros
p_ClienteID
,p_ProductoID
yp_CantidadVendida
se definen para recibir información al momento de llamar al procedimiento.
- Declaración de Variables:
IS
: Indica el inicio de la sección donde se declaran variables locales.v_TotalLinea
,v_PrecioProducto
,v_VentaID
: Variables de tipoNUMBER
que almacenarán el total de la venta, el precio del producto y el ID de la venta respectivamente.
- Inicio del Bloque:
BEGIN
: Marca el inicio del bloque de código que se ejecutará cuando se invoque el procedimiento.
- Consulta SQL:
SELECT Precio INTO v_PrecioProducto
: Esta línea obtiene el precio del producto de la tabla Productos según el ProductoID proporcionado.WHERE ProductoID = p_ProductoID;
: Filtra la consulta para obtener el precio específico del producto.
- Calcular Total de Venta:
v_TotalLinea = v_PrecioProducto * p_CantidadVendida;
: Calcula el total de la venta multiplicando el precio del producto por la cantidad vendida.
- Insertar Venta en Tabla Ventas:
INSERT INTO Ventas(ClienteID, FechaVenta, TotalVenta)
: Inserta una nueva fila en la tabla Ventas.VALUES (p_ClienteID, SYSDATE, v_TotalLinea)
: Inserta el ID del cliente, la fecha actual (SYSDATE
) y el total de la venta.RETURNING VentaID INTO v_VentaID;
: Captura el ID de la nueva venta generada y lo almacena env_VentaID
.
- Insertar Detalles de la Venta:
INSERT INTO DetallesVenta(VentaID, ProductoID, Cantidad, TotalLinea)
: Inserta detalles de la venta en la tabla DetallesVenta.VALUES (v_VentaID, p_ProductoID, p_CantidadVendida, v_TotalLinea);
: Almacena el ID de la venta, el ID del producto, la cantidad vendida y el total de la línea.
- Impresión del Resultado:
DBMS_OUTPUT.PUT_LINE('Venta insertada correctamente con ID: ' || v_VentaID);
: Imprime un mensaje en la consola indicando que la venta se insertó correctamente junto con el ID de la venta.
- Finalización del Procedimiento:
END;
: Indica el final del procedimiento.
2.7 Ejercicio 07
Calcular el Total de Ventas de un Cliente
Crea un procedimiento almacenado llamado sp_CalcularTotalVentasCliente
que reciba el ID de un cliente y calcule el total de ventas realizadas por ese cliente. Imprime el total de ventas.
Solución
CREATE OR REPLACE PROCEDURE sp_CalcularTotalVentasCliente (
NUMBER
p_ClienteID
)IS
NUMBER;
v_TotalVentasCliente BEGIN
SELECT SUM(TotalVenta) INTO v_TotalVentasCliente
FROM Ventas
WHERE ClienteID = p_ClienteID;
'El total de ventas del cliente con ID: ' || p_ClienteID || ' es ' || v_TotalVentasCliente);
DBMS_OUTPUT.OUT_LINE(END;
Descripción
- Declaración del Procedimiento:
CREATE OR REPLACE PROCEDURE sp_CalcularTotalVentasCliente
: Define el procedimiento almacenadosp_CalcularTotalVentasCliente
, que puede reemplazar uno existente con el mismo nombre.
- Parámetro de Entrada:
p_ClienteID NUMBER
: Un parámetro de tipoNUMBER
que recibe el ID del cliente cuyo total de ventas se calculará.
- Declaración de Variables:
v_TotalVentasCliente NUMBER
: Una variable local que almacenará el total de ventas para el cliente.
- Cálculo del Total de Ventas:
- Se ejecuta una consulta SQL que suma las ventas (
TotalVenta
) de la tabla Ventas para el cliente especificado porp_ClienteID
. El resultado se almacena env_TotalVentasCliente
.
- Se ejecuta una consulta SQL que suma las ventas (
- Impresión del Resultado:
- Se utiliza
DBMS_OUTPUT.PUT_LINE
para imprimir el total de ventas del cliente junto con su ID.
- Se utiliza
2.8 Ejercicio 08
Bucle para Mostrar Empleados con Salario Mayor a un Valor
Crea un bloque PL/SQL que use un bucle FOR para mostrar todos los empleados cuyo salario es mayor a 1500
Solución
DECLARE
VARCHAR(100);
v_Nombre NUMBER;
v_Salario BEGIN
FOR r IN (SELECT Nombre, Salario FROM Empleado WHERE Salario > 1500)
LOOP
:= r.Nombre;
v_Nombre := r.Salario;
v_Salario 'Empleado ' || v_Nombre || ', Salario: ' || v_Salario);
DBMS_OUPUT.PUT_LINE(END LOOP;
END;
Descripción
- Declaración de Variables:
v_Nombre
: Variable para almacenar el nombre del empleado.v_Salario
: Variable para almacenar el salario del empleado.
- Bucle FOR:
- Itera sobre el resultado de la consulta que selecciona los nombres y salarios de los empleados cuyo salario es mayor a 1500.
- Asignación de Variables:
- Dentro del bucle, se asignan los valores de Nombre y Salario de cada registro a las variables
v_Nombre
yv_Salario
, respectivamente.
- Dentro del bucle, se asignan los valores de Nombre y Salario de cada registro a las variables
- Impresión del Resultado:
- Utiliza
DBMS_OUTPUT.PUT_LINE
para imprimir el nombre y el salario de cada empleado que cumple la condición.
- Utiliza
- Finalización del Bloque:
- El bloque finaliza después de la ejecución del bucle.
2.9 Ejercicio 09
Calcular el Descuento de un Producto
Crea una función llamada fn_CalcularDescuento
que reciba el ID de un producto y un porcentaje de descuento, y devuelva el precio final con el descuento aplicado.
Solución
CREATE OR REPLACE FUNCTION fn_CalcularDescuento (
NUMBER,
p_ProductoID NUMBER
p_PorcentajeDescuento RETURN NUMBER
) IS
NUMBER;
v_PrecioProducto NUMBER;
v_PrecioConDescuento BEGIN
-- obtener precio del producto
SELECT Precio INTO v_PrecioProducto
FROM Productos
WHERE ProductoID = p_ProductoID;
-- calcular el precio con descuento
:= v_PrecioProducto * (1 - p_PorcentajeDescuento / 100);
v_PrecioConDescuento
RETURN v_PrecioConDescuento;
END
Descripción
- Declaración de la Función:
CREATE OR REPLACE FUNCTION fn_CalcularDescuento
define la función que puede reemplazar una función existente con el mismo nombre. Recibe dos parámetros:p_ProductoID
: ID del producto para el cual se calculará el descuento.p_PorcentajeDescuento
: porcentaje de descuento a aplicar al precio del producto.
- Declaración de Variables:
v_PrecioProducto
: Almacena el precio original del producto.v_PrecioConDescuento
: Almacena el precio del producto después de aplicar el descuento.
- Obtención del Precio del Producto:
- Se utiliza una consulta SQL para obtener el precio del producto con el ProductoID proporcionado. El precio se almacena en
v_PrecioProducto
.
- Se utiliza una consulta SQL para obtener el precio del producto con el ProductoID proporcionado. El precio se almacena en
- Cálculo del Precio con Descuento:
- El precio con descuento se calcula multiplicando el precio original por (1 - el porcentaje de descuento dividido por 100). El resultado se almacena en
v_PrecioConDescuento
.
- El precio con descuento se calcula multiplicando el precio original por (1 - el porcentaje de descuento dividido por 100). El resultado se almacena en
- Devolución del Precio Final:
- La función devuelve el
v_PrecioConDescuento
, que es el precio del producto después de aplicar el descuento.
- La función devuelve el