borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Bookmarklets Nuevo
  2. Recetario básico para CakePHP/2 Nuevo
  3. Certificado auto-firmado Nuevo

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Reiniciar secuencia
  4. Vaciar un esquema
  5. Certificado auto-firmado
Compartir esta página

Fechas automáticas

A veces viene bien tener un par de columnas en una tabla para controlar cuándo se ha creado y modificado cada fila. Con Oracle —¡faltaría más!— se puede automatizar estupendamente.

CREATE TABLE FOO (     FOO_ID NUMBER(*,0) NOT NULL,     -- ... y resto de campos     FECHA_INS DATE DEFAULT SYSDATE NOT NULL,     FECHA_MOD DATE DEFAULT SYSDATE NOT NULL,     CONSTRAINT FOO_PK PRIMARY KEY (FOO_ID) ); COMMENT ON COLUMN FOO.FECHA_INS IS 'Fecha de inserción'; COMMENT ON COLUMN FOO.FECHA_MOD IS 'Fecha de modificación'; /* * Mantener actualizada la fecha de modificación */ CREATE OR REPLACE TRIGGER FOO_TRG1     BEFORE UPDATE     ON FOO     REFERENCING NEW AS NEW OLD AS OLD     FOR EACH ROW BEGIN     :NEW.FECHA_MOD := SYSDATE; END FOO_TRG1; / ALTER TRIGGER FOO_TRG1 ENABLE;

El mecanismo es sencillo cual botijo: el DEFAULT SYSDATE rellena los campos con la fecha actual al insertar la fila (INSERT) —siempre que no se asignen valores a mano— y el trigger cambia la fecha de actualización al modificar la fila (UPDATE).

Historial

v2013-02-07
Quitar gestión de excepciones redundante.
v2011-06-21
Hacemos NOT NULL las columnas.
v2009-04-16
Primera versión.

Esta página ha sido impresa el sábado 23 de septiembre de 2017 (02:22:28 +0200) desde http://borrame.com/recortes/oracle/fechas-automaticas.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2017 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com