| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Dec | ||||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
- genexus (6)
- java (2)
- net (1)
- noticias ti (1)
- nulos em genexus (1)
- nulos em oracle (1)
- oracle (5)
- tomcat (2)
- webservice (1)
- 5. December 2008: Exercício de tratamento de nulos com GeneXus 9 Web e .NET e Oracle 10g XE
- 21. July 2008: Tutorial como hacer un WebService con GeneXus
- 21. July 2008: Instalación de Tomcat 5.5.20 en Windows para usar con GeneXus Java sin Deployment para MySql
- 17. December 2007: Como desinstalar oracle 9
- 3. July 2007: Como simular una función Session o Variable Global en Win con GeneXus y Oracle
- 26. June 2007: Insert Update de Caracteres especiales en Oracle ' chr(39)
- 24. April 2007: Tips: Como usar Case en Oracle
- 22. April 2007: Cual es mi numero de skype
- 21. September 2006: Tips: Como hacer nuestro clásico debug en java/tomcat con GeneXus
Author Archive
Como desinstalar oracle 9
17. December 2007 by Fabricio De los Santos.
Como desinstalar oracle completamente, borrando entradas en el registro de windows.
Luego de probar la versión 10g de oracle me decidí a desinstalar Oracle 9.2 de mi máquina, y me encontré con algunos detalles, que no pude apagar definitivamente, como carpetas de oracle y entradas de oracle en los servicios de windows.
Intenté instalar el oracle 10 por arriba pero me encontré con otros problemas a la hora de ejecutar.
En fin, terminé creando una guia que comparto aqui con un paso a paso para desinstalar oracle 9 por completo.
Paso a paso
- Verificar si se tiene odbcs asociados y eliminarlos ya que después quedan corruptos y da otro dolor de cabeza desinstalarlos (aunque también podemos después crear uno nuevo con el mismo nombre y ahí podemos apagarlo, pero lo más prolijo sería eliminar el odbc asociado antes de desinstalar oracle)
- Ejecutar el universal installer
- Borrar todos los homes que aparezcan
- Borrar la variable de ambiente ORAHOME
- Borrar de la variable de ambiente PATH todas las referencias a oracle (panel de control / sistema / avanzado / variables de ambiente)
- Borrar del registro toda referencia a oracle (ejecutar regedit buscar carpeta oracle y borrar)
- Reiniciar el pc
- Borrar la carpeta oracle debajo de c:\
En mi caso en particular como tenia la base de datos instalada local el instalador/desinstalador no me borró los servicios OracleHome92TnsListener y OracleServiceMiMaquina.
Tenemos dos formas de borrar estos servicios de windows
1) sc delete OracleHome92TnsListener
Entramos en el panel de control / servicios y ya no está mas.
2) Ejecutando regedit
Borramos la cadena correspondiente a OracleServiceMiMaquina en:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services
Esta segunda opción lo que tiene de diferente es que para ver si el servicio desapareció del panel de control / servicios, hay que reiniciar el pc
Si se usa la primera opción no es necesario reiniciar el pc.
Fabricio De los Santos
Gerencia de Proyectos - Consultoría GeneXus -
ERP – Sistemas de Misión Crítica - Bases de Datos.
Vea mis blogs en:
www.fabriciodelossantos.com
Posted in oracle | No Comments »
Como simular una función Session o Variable Global en Win con GeneXus y Oracle
3. July 2007 by Fabricio De los Santos.
Cuando trabajamos en Web y queremos distinguir una sesión de otra podemos utilizar una variable de tipo WebSession.
Esto básicamente queda muy claro en cualquier ejemplo GeneXus generado por patterns, etc.
Un ejemplo puede ser el procedimiento SetContext de GxWiki
&Session.Set(WikiParameters.Context, &Context.ToXml())
Básicamente seteamos en la variable de tipo WebSession algo particular, en este caso un SDT que se llama context.
Ahora bien, por que querría o precisaría tener algo similar a una WebSession pero en una aplicación Windows?
Si bien desde siempre existen las funciones UserID() y Wrkst() que podrían darme esa unicidad que preciso, dependiendo de la aplicación o de algunas limitantes o que nos encontremos, cantidad de licencias, etc, puede ser que ni la combinación de estas 2 funciones mencionadas, nos pueda garantir el dato de una sesión dentro de mi aplicación.
Por ejemplo:
Tengo una aplicación corriendo bajo Terminal Services con licencia para 10 usuarios, donde el nombre de usuario podría no indicarme nada en particular, digamos podrían ser del tipo User1, User2, etc, para lo cual si usara la función UserID() para grabar una auditoría en un registro, no me serviría de mucho.
New
xxxx=yyyy
xxxx=yyyy
xxxx=UserID()
EndNew
Entonces podría llegar a otra solución
Aplico un login y password en una pantalla cuando ingreso al sistema y lo asocio con UserID()
Algo sencillo para ejemplificar (sin contemplar cientos de criterios de seguridad) sería más o menos así:
For Each //Usuarios
Where UsrCod=&UsrCod
Where UsrPsw=&UsrPsw
New //Log
LogUsrID=UserID()
LogUsrCod=UsrCod
EndNew
EndFor
Para luego volver a mi rutina de auditoria
New
xxxx=yyyy
xxxx=yyyy
xxxx=udp(pUserID)
EndNew
Donde “pUserID” seria una recorrida de la tabla Log usando como condición “LogUsrID=UserID()” y devolviendo como resultado el valor de “LogUsrCod” que podria ser “Juan”
Perfecto, ahora si tengo un Usuario que conozco registrado para auditoría.
Pero bien, complicándola un poco más, que pasaría si ese “User1″ (del Terminal) está ejecutando mi aplicación y necesita ejecutar otra instancia?
No habría problemas, porque si bien no podría hacer el “New” en la tabla de “Log”, con la función “UserID()” obtendría el mismo dato, o sea “Juan”
Pero…
Si este mismo “User1″ (del Terminal) en vez de entrar como “Juan”, necesita entrar como “Pedro”?
No podré hacer un “New”, y ni pensar de utilizar un “When Duplicate” porque reemplazaría un usuario por otro para dos sesiones distintas!
Mmm…
Esto me hace pensar que a partir de la primera pantalla, tendré que pasar por parámetro el usuario que se logueó. Es una solución un poco tediosa, porque objetos que no contemplé antes voy a tener que acomodar para recibir este parámetro.
Sería una solución contar con una función WinSession() que me devuelva la sessión del usuario que está conectado a la base de datos. Claro, su funcionamiento interno sería particular para cada DBMS. Pero, por mientras esto no esté en GeneXus, podemos simularlo mezclando algunos ingredientes de Oracle y luego cada uno puede aplicarlo en su DBMS de desarrollo.
1) Debemos crear una view en nuestra base de datos.
CREATE OR REPLACE FORCE VIEW MISESSION AS
select userenv(’SESSIONID’) SESSIONID from dual;
2) En GeneXus, creamos un DataView a esa View de Oracle con un atributo para identificar la sesión.
3) Luego creamos un procedimiento que nos devuelva la sesión, para esto, hacemos un simple for each que recorra este data view, el cual para nuestra sesión solo va a devolver un registro.
En mi ejemplo lo llame “pmisession”
&MiSession=0
For Each //MISESISON
Defined By SessionID
&MiSession=SessionID
EndFor
Y listo, ahora simplemente en vez de utilizar la función UserId() o Wrkst(), llamaré a este procedimiento para obtener mi variable única.
Y si eres demasiado cómodo (y sólo si estás acostumbrado con el underground de GeneXus), puedes adicionar esta “función personalizada” a los archivos “*func.pst” en el directorio de GeneXus con la sintaxis
pmiession.Udp():Numeric
para que de esta forma cuando la quieras utilizar, simplemente presionando “Ctrl + U”, aparezca dentro de la lista de funciones.
Otras de las posibilidades sería usar el comando SQL de GeneXus, pero lamentablemente, no permite devolver resultados, si existiera una variante del mismo que permitiera en algunos casos devolver un resultado único para almacenar en una variable GeneXus, podría ser algo parecido a esto:
&sent=”select userenv(’SESSIONID’) from dual;”
&misession= sql [!&sent!]
Pero… por ahora no existe.
Observación:
Puede parecer simple o de poco valor esta función de unicidad, pero realmente es algo útil.
Hace unos años en otra empresa, implementamos un sistema con una KB que usaba la función Wrkst() (y todavía lo sigue usando) para mantener la unicidad, y para que cada máquina corra en una sessión única, deshabilitamos la posibilidad que se ejecutara el sistema más de una vez por máquina, justamente para tener esa unicidad, algo que hoy realmente se podría solucionar de esta forma, que ya existía en aquella época, pero a veces uno toma las cosas como vienen y basados en el lema “lo que funciona no se cambia”, a veces perdemos eficiencia.
Fabricio De los Santos
Gerencia de Proyectos - Consultoría GeneXus -
ERP – Sistemas de Misión Crítica - Bases de Datos.
Vea mis blogs en:
www.fabriciodelossantos.com
Posted in oracle, genexus | No Comments »
Insert Update de Caracteres especiales en Oracle ‘ chr(39)
26. June 2007 by Fabricio De los Santos.
Insert Update de Caracteres especiales en oracle ‘ chr(39)
Acostumbrado a trabajar con GeneXus, cuando necesito insertar o actualizar un valor con comilla simple en una columna caracter, la operación es muy sencilla:
atributo=”‘hola mundo’”
Ahora cuando queremos hacer esto en un script, usando por ejemplo sqlplus, la operación es distinta.
Básicamente hay que colocar otra comilla simple antes de la que queremos poner, de la siguiente forma:
insert into fdtest values(”’hola mundo”’);
Ahora bien si el caso que tenemos es al revés.
Tenemos en la tabla comilla simple y queremos pasarlas a dobles, nos encontramos, con el mismo problema, porque en la función replace no podemos invertir las comillas para hacer la búsqueda.
La solución en este caso es:
En el parámetro de búsqueda, usar el valor ascii de este caracter especial de la siguiente forma
select replace(campo,chr(39),’”‘) from fdtest;
Nuestro resultado será:
“hola mundo”
Fabricio De los Santos
Gerencia de Proyectos - Consultoría GeneXus -
ERP – Sistemas de Misión Crítica - Bases de Datos.
Vea mis blogs en:
www.fabriciodelossantos.com
Posted in oracle, genexus | No Comments »
Tips: Como usar Case en Oracle
24. April 2007 by Fabricio De los Santos.
Puede darse el caso de que querramos devolver un texto o valor dependiendo del dato de una columna en una tabla Oracle.
Por ejemplo
Si tenemos una tabla de nombre Empleados_Salarios con los campos
Empleado, Salario
y con valores
Agustin, 20.000
Ignacio, 1.500
Nicolás, 10.000
Y en un select queremos en vez de reflejar los valores exactos y mostrar categorías, podemos usar la sentencia CASE de Oracle como el siguiente ejemplo muestra.
Select Empleado,
CASE
when Salario when Salario >= 5.000 and Salario else ‘Salario Alto’
END Categoria_Salario
from Empleados_Salarios;
La sentencia contiene las palabras reservadas “when” para establecer las condiciones, “else” para el caso que no cumpla una de las condiciones when, y “CASE” y “END” que encierran la cláusula condicional, coloqué la palabra “Categoria_Salario” como alias de la columna de categorías.
Otro ejemplo sencillo podría ser:
Tengo una tabla de nombre Stock con 3 campos:
Material char(20),
Entradas number(10),
Salidas number(10)
Y quisiera saber los saldos positivos de Entradas - Salidas, y en el caso que las Salidas sean mayores que las Entradas, no quiero mostrar el valor negativo, sino un valor 0.
Tengo que tener en cuenta los valores nulos que pudiera tener de Entradas o Salidas
El select sería el siguiente:
Select Material,Nvl(entradas,0) Entradas, Nvl(salidas,0) Salidas,
Case Nvl(entradas,0) - Nvl(salidas,0) > 0 then Nvl(entradas,0) - Nvl(salidas,0)
else 0
End Diferencia
from Stock;
Espero que estos mini ejemplos sean de utilidad.
Fabricio De los Santos
Gerencia de Proyectos - Consultoría GeneXus -
ERP – Sistemas de Misión Crítica - Bases de Datos.
Vea mis blogs en:
www.fabriciodelossantos.com
Posted in oracle | No Comments »
Cual es mi numero de skype
22. April 2007 by Fabricio De los Santos.

Probablemente a esta altura ya tengas Skype y hayas comprado un número SkypeIn (el número que eliges en una ciudad, y a al cual te puede llamar cualquier persona que tenga o no tenga Skype, y te deriva la llamada a tu Skype), pero probablemente también no te acuerdas cual es el número.
Ayudando un poco a la gente de Skype, ya que en el sitio tienes que dar 2 o 3 click para llegar a obtener esa información te explico como llegar.
Entras al sitio de Skype, www.skype.com
Alli arriba, te aparece un link que dice “Entrar” o “Sign in” con un idioma por default o puedes alterar el idioma en “Alterar”
Caso que coincida el idioma con el que tu estás acostumbrado, haces click en “Entrar”
Ahi en la misma pantalla te tu usuario y contraseña.
Y enseguida caes en una pantalla donde aparecen tus 3 posibles servicios
SkypeOut - SkypIn - Skype Voicemail
y allí aparece tu número de SkypeIn
Lamentablemente, te tengo que decir, que si comienzas a navegar por el sitio de Skype, realmente, después es muy dificil nuevamente ir a esa pantalla, además constantemente te pide usuario y contraseña de nuevo (van a tener que mejorar el sitio amigos de Skype), así que por las dudas te dejo el link
Si ya te logueaste al menos una vez en los últimos 10 minutos en el sitio de Skype, y estás en la misma pantalla del browser, que te logueaste al sitio de Skype puedes hacer click en el siguiente link
Fabricio De los Santos
Gerencia de Proyectos - Consultoría GeneXus -
ERP – Sistemas de Misión Crítica - Bases de Datos.
Vea mis blogs en:
www.fabriciodelossantos.com
Posted in noticias ti | No Comments »
Tips: Como hacer nuestro clásico debug en java/tomcat con GeneXus
21. September 2006 by Fabricio De los Santos.
Generalmente cuando programábamos para plataformas Windows y queríamos saber que valor tenía una variable o un campo, simplemente poníamos un msg en el programa y este aparecía en pantalla.
Para realizar esta tarea en java si estamos programando para web, podemos usar la siguiente sentencia:&msg=’Texto identificatorio ’ + &variable
Msg(&msg,status)
Luego de esto vamos al directorio que está instalado el tomcat y buscamos la carpeta “logs”
Ejemplo de una instalación Windows:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs
Aqui buscamos el archivo stdout.log, lo abrimos y buscamos el “texto identificatorio” que pusimos en el msg() y allí encontraremos el valor de nuestra variable.
Fabricio De los Santos
Gerencia de Proyectos - Consultoría GeneXus -
ERP – Sistemas de Misión Crítica - Bases de Datos.
Vea mis blogs en:
www.fabriciodelossantos.com
Posted in tomcat, java, genexus | No Comments »