Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

¿Cómo obtener el valor máximo de diferentes columnas en una consulta SQL de Oracle?

|
Cuando queremos obtener el valor máximo de una columna solemos usar la función MAX(). Por ejemplo:

SELECT name, MAX(date1)
FROM usuarios GROUP BY name;

Obtendríamos la 'date1' más reciente para el 'usuario'  identificado con 'name'.

Pero que pasa si lo que queremos es obtener el valor máximo de diferentes fechas de un mismo usuario? Para ello tenemos la función GREATEST():

SELECT name, GREATEST(date1, date2)
FROM usuarios;

El problema viene cuando una de las fechas es NULL. Todas las funciones de Oracle devuelven NULL cuando alguno de sus parámetros lo es. Así que si no nos interesa esto, para el ejemplo anterior podríamos inventarnos una fecha ficticia y usar NVL():

SELECT name, GREATEST(nvl(date1,dateX), nvl(date2,dateX))
FROM usuarios;

Si suponemos que dateX es más antigua que cualquier date1 o date2, con esto evitamos que nos devuelva NULL si alguna de ellas lo es. Si las 2 son NULL, nos devolverá dateX. Si queremos mantener el resultado NULL en este caso, se me ocurre añadir el uso de DECODE():

SELECT name,
DECODE(
    GREATEST(nvl(date1,dateX), nvl(date2,dateX)),
    dateX,
    NULL,
    GREATEST(nvl(date1,dateX), nvl(date2,dateX))
)
FROM usuarios;

Cuando el resultado del GREATEST sea dateX, o es que dateX es la más reciente de todas las fechas (no debería) o es que todas son NULL. Así que en este caso devolvemos NULL con el DECODE.

Parece un poco rebuscado y para 2 fechas se puede combinar con otras funciones Oracle, por ejemplo con COALESCE(), pero cuando te encuentras con N columnas, esto me ha parecido lo más sencillo...

Oracle BEA Customer Welcome Briefing

|
Esta semana pasada se celebró en Madrid un evento de presentación de la 'fusión' entre Oracle y Bea. Podriamos decir que Bea pasa a formar parte de las aproximadamente 20 empresas que se ha comido Oracle en poco tiempo, pero no es del todo cierto. Estas dos empresas se complementan con sus productos.

Este evento ha sido toda una oportunidad para...

...conocer la nueva estrategia de negocio y los productos por los que apuestan, tales como el antiguo WebLogic Server de Bea; y de los que no, como el WebLogicPortal de Bea que se sustituye por el WebCenter de Oracle.

...conocer a Madrid por mi parte y descubrir que en los bares te sirven tapas que no has pedido y que no te piensan cobrar!

Una vez más Raona está consciente en la evolución de las nuevas tecnologias, para apostar por las tecnologias con futuro.

JOUTU instalar Oracle 10g in Fedora 8

|
Oracle se ha ganado esta entrada al blog, después de los múltiples problemas sufridos al instalar la base de datos Oracle 10g en un Fedora 8 para un entorno de desarrollo. Hago un resumen de los más destacados.

Una vez descargado y desempaquetado el paquete de Oracle, realicé las acciones previas para preparar el SO (se encuentra en la carpeta DOC del paquete en cuestión). Y cuando llegó el momento de arrancar el instalador, entendí porqué en producción usaban un Red Hat 8.

1. Compatibilidad del SO

Debemos engañar al instalador para ignorar que estamos usando un Fedora y no un Red Hat:

./runInstaller –ignoreSysPrereqs

2. Requisitos de las librerías

Si por desgracia seguimos sin ver la pantalla anterior por problemas de librerías, en mi caso fue la libXp.so.6, con Fedora lo solucionaríamos haciendo lo siguiente en una consola como root:

yum whatprovides libXp.so.6

Y después instalaríamos los paquetes que nos muestre el comando anterior:

yum install nombreDelPaquete

Para los no amantes de la consola, podéis usar yumex (lo podéis instalar ejecutando yum install yumex).

3. Arrancar el instalador en modo gráfico

Puede que el instalador no pueda arrancar en modo gráfico. En consola deberías estar cómo el usuario ‘oracle’, cambiando a ‘root’ y ejecutar:

xhost +localhost

4. Importación de una BD

Para restaurar una BD a partir de un fichero .dmp, ejecutamos por consola con el usuario oracle:

imp full=Y file=filename log=logfile

Para más info:

http://www.infor.uva.es/~jvegas/cursos/bd/oraback/oraback.html

5. Arrancar la BD Oracle

Cuando ya todo parece funcionar y llevas tiempo trabajando con la BD, en algún momento tienes la sensación de que algo va mal, ya no nos podemos conectar a la BD pero el servidor Linux sigue en marcha, ¿qué pasa?

Sistemas reinició el servidor en algún momento y el motor Oracle no arranca por sí solito con el SO… Pues nada, hay que ejecutar esto:

export ORACLE_HOME=/home/XXXX/oracle/product/10.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=XXXX
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

sqlplus /nolog
connect / as sysdba
startup
exit

lsnrctl start

isqlplusctl start

emctl start dbconsole

Espero que este 'joutu' saque de apuros a otros como yo!