Hi! Could we please enable some services and cookies to improve your experience and our website?

SQLize | PHPize | SQLtest

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

A A A
Login    Share code      Blog   FAQ
Copy Format Clear
-- 1. Crear tabla Clientes (puedes adaptarla a tus necesidades reales) DROP TABLE IF EXISTS Clientes CASCADE; CREATE TABLE Clientes ( ClienteID SERIAL PRIMARY KEY, Nombre TEXT, Email TEXT ); -- 2. Crear tabla RegistroCambios DROP TABLE IF EXISTS RegistroCambios; CREATE TABLE RegistroCambios ( Id INT8 GENERATED ALWAYS AS IDENTITY PRIMARY KEY, FechaHora TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, ClienteID INT, TipoOperacion TEXT, CamposModificados TEXT ); -- 3. Crear función para registrar cambios CREATE OR REPLACE FUNCTION registrar_cambios() RETURNS TRIGGER AS $$ DECLARE campos TEXT := ''; BEGIN IF TG_OP = 'INSERT' THEN campos := 'Nuevo registro: ' || ROW_TO_JSON(NEW); INSERT INTO RegistroCambios (ClienteID, TipoOperacion, CamposModificados) VALUES (NEW.ClienteID, 'INSERT', campos); RETURN NEW; ELSIF TG_OP = 'UPDATE' THEN campos := 'Campos modificados: '; IF NEW.Nombre IS DISTINCT FROM OLD.Nombre THEN campos := campos || 'Nombre, '; END IF; IF NEW.Email IS DISTINCT FROM OLD.Email THEN campos := campos || 'Email, '; END IF; campos := TRIM(TRAILING ', ' FROM campos); INSERT INTO RegistroCambios (ClienteID, TipoOperacion, CamposModificados) VALUES (NEW.ClienteID, 'UPDATE', campos); RETURN NEW; ELSIF TG_OP = 'DELETE' THEN campos := 'Registro eliminado: ' || ROW_TO_JSON(OLD); INSERT INTO RegistroCambios (ClienteID, TipoOperacion, CamposModificados) VALUES (OLD.ClienteID, 'DELETE', campos); RETURN OLD; END IF; END; $$ LANGUAGE plpgsql; -- 4. Crear trigger DROP TRIGGER IF EXISTS trigger_registrar_cambios ON Clientes; CREATE TRIGGER trigger_registrar_cambios AFTER INSERT OR UPDATE OR DELETE ON Clientes FOR EACH ROW EXECUTE FUNCTION registrar_cambios(); -- 5. Pruebas: INSERT, UPDATE, DELETE -- Insertar cliente INSERT INTO Clientes (Nombre, Email) VALUES ('Juan Pérez', 'juan@example.com'); -- Actualizar cliente UPDATE Clientes SET Nombre = 'Juan P. Pérez' WHERE ClienteID = 1; -- Eliminar cliente DELETE FROM Clientes WHERE ClienteID = 1; -- 6. Ver contenido de RegistroCambios SELECT * FROM RegistroCambios ORDER BY FechaHora;

Stuck with a problem? Got Error? Ask AI support!

Copy Clear