Trigger de base de datos

Al estar con un cliente, surgió la necesidad de tener ciertos valores de parámetros asignados para una sesión de un usuario normal. Estos valores, sólo eran válidos para ciertos usuarios, por lo que no se podían asignar al PFILE o SPFILE. Así, se creó un trigger a nivel base de datos para los usuarios en cuestión.

Para lograr esto, se requiere la opción after logon on al momento de crear un trigger. Esto servirá para cuando un usuario en general se desea conectar a la base de datos, o puede ser un usuario en especial también. Este último, es el caso de revisión en este post; así, incluyo aquí un ejemplo del mismo. Suponiendo que se desea específicamente para los usuarios PRUEBA y PRUEBA2, que tengan el formato de fecha dd/mm/yyyy predeterminado:

SQL> conn prueba/prueba
Connected.
SQL> select sysdate from dual;
SYSDATE
--------
22/02/09
SQL> conn prueba2/prueba2
Connected.
SQL> select sysdate from dual;
SYSDATE
--------
22/02/09
SQL> conn / as sysdba
Connected.
SQL> create or replace trigger trigger_de_bd_prueba
  2  after logon on prueba.schema
  3  begin
  4     execute immediate 'alter session set nls_date_format = ''dd/mm/yyyy''';
  5  end;
  6  /
Trigger created.
SQL> conn prueba/prueba
Connected.
SQL> select sysdate from dual;
SYSDATE
----------
22/02/2009
SQL> conn prueba2/prueba2
Connected.
SQL> select sysdate from dual;
SYSDATE
--------
22/02/09
SQL> conn / as sysdba
Connected.
SQL> create or replace trigger trigger_de_bd_prueba2
  2  after logon on prueba2.schema
  3  begin
  4     execute immediate 'alter session set nls_date_format = ''dd/mm/yyyy''';
  5  end;
  6  /
Trigger created.
SQL> conn prueba2/prueba2
Connected.
SQL> select sysdate from dual;
SYSDATE
----------
22/02/2009

Con esto, siempre que PRUEBA y PRUEBA2 se conecten a la base de datos, tendrán su propio formato de fecha a dd/mm/yyyy.

Si se desea que esto funcione para todos los usuarios conectados a la base de datos, incluso asignando ciertos valores especiales, no necesariamente parámetros de la base de datos, se usa otro formato del trigger:

SQL> conn / as sysdba
Connected.
SQL> drop trigger trigger_de_bd_prueba;
Trigger dropped.
SQL> drop trigger trigger_de_bd_prueba2;
Trigger dropped.
SQL> conn prueba/prueba
Connected.
SQL> select sysdate from dual;
SYSDATE
--------
22/02/09
SQL> conn prueba2/prueba2
Connected.
SQL> select sysdate from dual;
SYSDATE
--------
22/02/09
SQL> conn / as sysdba
Connected.
SQL> create or replace trigger trigger_de_bd
  2  after logon on database
  3  begin
  4     execute immediate 'alter session set nls_date_format = ''dd/mm/yyyy''';
  5  end;
  6  /
Trigger created.
SQL> conn prueba/prueba
Connected.
SQL> select sysdate from dual;
SYSDATE
----------
22/02/2009
SQL> conn prueba2/prueba2
Connected.
SQL> select sysdate from dual;
SYSDATE
----------
22/02/2009

El uso de este tipo de triggers, incluso aplica si se desea insertar registros en una tabla en especial al momento que un usuario se conecte a la base de datos entre otros diversos usos. Espero les sea de utilidad.

Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: