Files
prueba_tecnica_proxima/db/05_UpdateContract.sql
2025-06-15 18:29:25 +02:00

48 lines
1.4 KiB
PL/PgSQL

DROP FUNCTION IF EXISTS public.update_contract (
INTEGER,
INTEGER,
VARCHAR(20),
VARCHAR(50),
VARCHAR(100),
TIMESTAMP
);
CREATE OR REPLACE FUNCTION public.update_contract (
p_contract_id INTEGER,
p_rate_id INTEGER,
p_contractor_id_number VARCHAR(20) DEFAULT NULL,
p_contractor_name VARCHAR(50) DEFAULT NULL,
p_contractor_surname VARCHAR(100) DEFAULT NULL,
p_contract_init_date TIMESTAMP DEFAULT NULL
)
RETURNS INTEGER
AS $$
BEGIN
PERFORM 1
FROM public.contracts
WHERE id = p_contract_id;
IF NOT FOUND THEN
RAISE EXCEPTION
'No existe ningún contrato con id %', p_contract_id;
END IF;
PERFORM 1
FROM public.rates
WHERE id = p_rate_id;
IF NOT FOUND THEN
RAISE EXCEPTION
'No existe ninguna tarifa con id %', p_rate_id;
END IF;
UPDATE public.contracts
SET
contractoridnumber = COALESCE(p_contractor_id_number, contractoridnumber),
contractorname = COALESCE(p_contractor_name, contractorname),
contractorsurname = COALESCE(p_contractor_surname, contractorsurname),
contractinitdate = COALESCE(p_contract_init_date, contractinitdate),
rateid = p_rate_id
WHERE id = p_contract_id;
RETURN p_contract_id;
END;
$$ LANGUAGE plpgsql VOLATILE;