miércoles, 19 de noviembre de 2014

Orden de reglas en GX

Muchas veces tenemos que poner reglas en Transacciones genexus que son un poco complicadas y tenesmos que pensar cual regla se ejecuta antes de otra, con el tiempo uno lo hace ya casi por instinto, pero siempre nos queda la duda de esta bien lo que estamos haciendo.
Como encontré en la wiki de Gx algo que está bien claro, sobre todo para las versiones nuevas lo pego acá para que todo el mundo lo tenga un poco más claro.


Rule Triggering Order

When a Transaction has been confirmed, the events will be triggered in the following order:
  • BeforeValidate
  • Check Extended Table (Internal GeneXus triggering event; Refcall rules are triggered here).
  • Confirm data
  • Check Optimistic Concurrency (Internal GeneXus triggering event; Record modification and locking are checked in this event).
  • AfterValidate (first level)
  • BeforeInsert/Update/Delete
  • DB is updated
  • AfterInsert/Update/Delete
    • BeforeValidate Level
    • Confirm data
    • AfterValidate Level
    • BeforeInsert/Update/Delete Level
    • AfterInsert/Update/Delete Level
  • AfterLevel Level
  • DB is updated; the success message is displated ('Data has been successfully added')
  • BeforeComplete
  • Commitment of the LUW
  • AfterComplete

martes, 12 de agosto de 2014

Show full processlist para postgresSQL




Me enfrente a un problema con una aplicación en postgreSQL y lo primero que quise hacer es el conocido (por mi) show full processlist, para detectar que consultas sql se están corriendo en el motor. En postgreSQL esto no funciona entonces buscando un poco en internet encontré la forma de hacerlo.
La consulta que hay que correr es lo siguiente
select * from pg_stat_activity;

esto se puede hacer de 2 formas, por ejemplo en pgAdmin correrla con cualquier sql. O también podemos hacerlo con consola, entonces se debe de seguir los siguientes pasos:
-          # su postgres
-          # [postgres@srv]$ psql
-          postgres=# select * from pg_stat_activity;

Con esto se pueden ver las consultas igual que en MySql.

viernes, 6 de junio de 2014

Consulta con condicional en db2 / sql



Tengo que realizar una consulta en db2 (igual esto funciona en otros motores, hay que ver bien la sintaxis)  que muestre una información si se cumple determinada condición y otra si no se cumple, algo del estilo mostrar el valor A si C>D o B si C<=D.

La sintaxis en DB2 es la siguiente

Select
  CASE
        WHEN (C>D)
  THEN
        A
  ELSE
        B
  END
               as "texto….",
from TABLA 


jueves, 5 de junio de 2014

Consulta en DB2 filtrando por fecha en formato YYYYMMDD.



Estuve bastante rato buscando  cómo hacer para en DB2 hacer una consulta de los registros de la base que cumplieran con ser los del día, siendo que estos están guardados en formato YYYYMMDD.

Lo pude solucionar de la siguiente forma.


select * from TABLA
                where (CAMPO in (
                                               select concat(concat('20',substr(CHAR(current date),7,2)),concat(substr(CHAR(current date),1,2),substr(CHAR(current date),4,2))) from mmdb.locale FETCH FIRST 1 ROWS ONLY
                                                    )
                              );



Obviamente se pude agregar el where que se necesite y los join también que necesiten.

Si tienen alguna forma más fácil de hacerlo será bienvenida.