Buscar este blog

jueves, 9 de diciembre de 2010

CARÁCTER UNDERSCORE (_) EN SENTENCIA LIKE EN PL/SQL

Muchas veces hemos utilizado la sentencia LIKE en SQL para realizar filtros en consultas y encontrar los registros que tienen el campo de filtro similar (LIKE) a lo que necesitamos encontrar. Por ejemplo, suponiendo que tenemos una tabla donde almacenamos la información de personas y deseamos encontrar a todas las personas que dentro de su nombre se encuentran la palabra LUIS, nuestra sentencia SQL quedaría de la siguiente forma:

SELECT *
FROM PERSONA
WHERE NOMBRE LIKE ‘%LUIS%’;

En este caso el carácter porcentaje (%) es un carácter especial de SQL que junto con la sentencia LIKE nos ayuda a indicar que los caracteres que precedan o que sigan a una secuencia de caracteres no se tomaran en cuenta. En el caso de la consulta anterior no importa que caracteres existan antes y después de la palabra LUIS en el valor del campo, siempre que exista esta secuencia de caracteres se dará como verdadera la condición.

Pero que ocurre cuando tenemos nombres que utilizan el carácter underscore? Por ejemplo, si tenemos una lista de productos, en los que los códigos son nombres compuestos por underscore, como por ejemplo P_A_123, P_AB_234, P_AC_345, etc., encontraremos que al momento de ejecutar una sentencia como la siguiente:


SELECT *
FROM PRODUCTOS
WHERE CODIGO LIKE ‘P_A_%’;


No nos retornara los registros que deseamos, si no que nos devolverá como resultado el listado de todos los registros ignorando por completo el ultimo underscore (_), pero ¿porque ocurre esto? Esto es debido a que el carácter underscore (_) dentro de SQL en algunas sentencias es utilizado como un carácter especial, es por esta razón que se debe de especificar dentro de la sentencia LIKE que el carácter underscore  (_) debe de ser tomado con su valor literal, esto se logra modificando la sentencia anterior de la siguiente forma:


SELECT *
FROM PRODUCTOS
WHERE CODIGO LIKE ‘P\_A\_%’ ESCAPE ‘\’;


De este modo lograremos obtener el resultado deseado que en este caso será únicamente el registro con el código igual P_A_123.

martes, 26 de octubre de 2010

DEBUGGEANDO TRIGGERS EN ORACLE

El dia de hoy me vi en la obligacion de debuggear un trigger en Oracle, utilizando Oracle SQL Developer, por la simple razon de que no me llevo muy bien con Oracle SQL*Plus y que el instalar otro cliente para la base de datos tomaria mucho tiempo, encontre este statement para poder obtener los errores que estan ocurriendo al momento de ejecutar un trigger.


SELECT LINE, POSITION, TEXT
  FROM USER_ERRORS
 WHERE NAME = 'MI_TRIGGER'
   AND TYPE = 'TRIGGER'
 ORDER BY SEQUENCE;



En este caso la palabra MI_TRIGGER debe de ser sustituido con el nombre del trigger del cual desean visualizar los errores.

miércoles, 18 de agosto de 2010

Formateando Codigo Fuente en Blogger

Desde hace mucho tiempo atras, aunque no de forma continua venia buscando como poder formatear codigo fuente en mis entradas del blog, pero no encontraba una forma funcional de hacerlo, quiza no soy muy buen buscador :(


Finalmente el dia de hoy encuentro el SyntaxHighlighter, el cual es un resaltador de sintaxis de codigo completamente independiente, el cual esta conformado por un conjunto de archivos JavaScript y hojas de estilo, con soporte, a mi juicio, para una buena cantidad de lenguajes de programacion, y lo mejor de todo... completamente gratuito y completamente compatible con Blogger :)


La integracion con Blogger esta descrita en ingles aqui, estas instrucciones fueron las que a creo explican de manera mas completa la integracion de SyntaxHighlighter con Blogger.


Así que para todas aquellas personas que aun no han encontrado una manera de dar formato a su código fuente en Blogger, acá tienen como hacerlo.

miércoles, 3 de febrero de 2010

CENTRANDO POP-UPs RELATIVOS AL PARENTAPPLICATION EN FLEX BUILDER 3

Trabjando un poco en un pequeño proyecto llegue al punto en que deseaba poder centrar un elemento que era creado por un contenedor, digamos de "tercer nivel" (era un canvas, dentro de otro canvas que estaba dentro del parentApplication), en Flex Builder, pero nada me funcionaba. Lo que sucedia es que me centraba el pop-up que creaba relativo al control desde donde creaba el pop-up :(

Navegue un poco por la red y encontre propuestas de solucion tales como hacer lo siguiente:

var window:myWindow = myWindow(PopUpManager.createPopUp(parentApplication,myWindow,false));
PopUpManager.centerPopUp(window);

o bien

var window:myWindow = myWindow(PopUpManager.createPopUp(Application.application,myWindow,false));
PopUpManager.centerPopUp(window);

pero nada de eso me resulto :(. Asi que leyendo un poco se me ocurrio una "solucion" (no estoy seguro que sea la mejor, si encuentran otra pues que mejor que lo comenten por aca :D ).

Dado que necesitaba que funcionara para cualquier clase que tuviera las propiedades de poder desplegarse como pop-up, decidi crear un metodo publico en mi parentApplication, el cual es el siguiente:


public function centerWindowOnTop(className:Class):void
{
var window:IFlexDisplayObject = PopUpManager.createPopUp(this,className,false);
PopUpManager.centerPopUp(window);
}

y desde mi contenedor de "tercer nivel" basto con crear un metodo que se ejecute con el evento click del control que dispara dicho evento, como el siguiente:

private function showMyWindow():void
{
Application.application.centerWindowOnTop(myWindow);
}


y con esto pude mostrar las ventanas del tipo que deseaba centradas relativas al parentApplication y no al control que las manda a llamar :D.