Nueva edición 2020/2021 del exitoso curso online “Bases de datos espaciales: PostGIS”

Hola a todos los amantes de los sistemas de información geográfica (SIG’s) y software de código abierto, la nueva edición del curso “Bases de datos espaciales: PostGIS” ya está aquí, actualizado a la versión 3 de PostGIS.

Las inscripciones ya están abiertas. El curso consta de un amplio temario compuesto por 15 módulos, 350 páginas de apuntes, 8 horas de video y 120 prácticas a realizar por los estudiantes; con una duración de 105 horas aproximadamente.

En el aprenderás el uso del lenguaje estructurado de consultas (SQL) de la base de datos PostgreSQL, PostGIS básico y Postgis Avanzado.

El curso está avalado por la Universidad Politécnica de Valencia, España, obtendrás un certificado oficial de aprovechamiento de parte de ésta universidad.

Puedes distribuir el tiempo dedicada al curso como más te convenga en los tres meses que dura el curso.

Para mas información e inscripción visita la página de CartoSIG o la página de cursos de la Universidad Politécnica de Valencia.

¡Los esperamos!

Cómo usar LIKE para comparar dos campos o columnas en Oracle.

Por lo regular, al usar el operador LIKE en una sentencia sql, lo comparamos con una cadena de texto, por ejemplo:

SELECT * FROM employees WHERE first_name LIKE '%ll%'; 

En el ejemplo anterior, obtendríamos todas las filas o registros de la tabla “employees” que contengan en su campo o columna “first_name” una doble ele minúscula.

Ahora, ¿qué tal si en lugar de escribir directamente el texto “ll” quisiéramos usar un campo o columna? Entonces tendríamos que usar el operador lógico LIKE de la siguiente forma:

...first_name LIKE '%' || nombre_del_campo_a_comparar || '%';

Donde “nombre_del_campo_a_comparar” es la columna o campo de tipo cadena de una tabla. El operador “||” en oracle, sirve para concatenar cadenas.

Bueno espero y esta entrada les sea de utilidad.

¡Hasta pronto!

Cómo obtener cuántos días hay entre dos fechas en Oracle.

Para obtener los días entre dos fechas a través de una sentencia Sql en Oracle podemos usar sencillamente la aritmética de tipos DATE (fecha) de esta base de datos. Para hacer esta operación los operandos deben ser de tipo DATE (fecha).

Supongamos que tenemos dos columnas o campos llamados START_DATE y END_DATE, ambos de tipo DATE, en una tabla llamada JOB_HISTORY. Para obtener los días entre dichas fechas utilizaríamos algo así:

SELECT 
    end_date, start_date, end_date - start_date as dias
FROM 
    job_history;

Simplemente restamos de la fecha mayo o más actual (en este caso end_date) la fecha menor o más antigua (start_date) usando le palabra reservada o símbolo de menos ( – ). El resultado sería algo así:

Hay que tomar en cuenta que en esta operación Oracle toma como comienzo de la fecha la hora cero de día, es decir que no incluye el día final. Por ejemplo, supongamos que queremos obtener los días que hay entre el primero de enero del año dos mil y el 31 de enero de ese mismo año, la consulta sql sería:

select 
    TO_DATE('31/01/2000','DD/MM/YYYY') - TO_DATE('01/01/2000','DD/MM/YYYY') as dias
from dual;

La ejecución de esta consulta nos daría como resultado 30 días y no 31 como algunos esperaríamos. La solución sería añadir 1 a la operación:

select 
    (TO_DATE('31/01/2000','DD/MM/YYYY') - TO_DATE('01/01/2000','DD/MM/YYYY')) + 1 as dias
from dual;

Espero y les sirva este entrada o post. ¡Hasta la próxima!

Sql Developer: Cómo cargar todos los registros resultantes de una consulta SQL.

Por defecto y debido a cuestiones de rendimiento, SQL Developer de Oracle, sólo muestra 200 filas en el área de resultados después de ejecutar una consulta SQL. A medida que avanzamos con la barra de desplazamiento, va mostrando los resultados en conjuntos de 200 filas hasta llegar al fin.

SQL Developer no muestra todos los resultados de una sola vez, como a veces lo necesitamos. El estar desplazándonos por la barra de desplazamiento de la ventana de resultados es tardado y tedioso. Sin embargo, existe un pequeño truco para hacer que muestre los resultados completos una vez que hayamos  ejecutado la consulta SQL y nos muestre los primeros registros:

Nos ubicarnos en la ventana o área de resultados de la consulta y oprimimos las teclas Ctrl-Fin al mismo tiempo.

Esto nos llevará al última fila de la consulta y por ende cargará todas las filas de la consulta. La próxima vez que quieras que SQL Developer muestra todas las filas resultantes, aplica este truco.

¡Saludos!

Numerar por grupos los resultados de una consulta SQL en Oracle

En el post pasado vimos como numerar los resultados de una consulta desde 1 a el total de registros devueltos por la consulta con la función ROW_NUMBER(). Ahora queremos que numere desde 1  hasta el número de registros que exista en cada grupo distinto de datos que regrese la consulta. Para ejemplificar usaremos la consulta siguiente a la tabla EMPLOYEES:

SELECT 
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY last_name) AS numero_consecutivo,
    department_id,
    last_name 
FROM 
    employees;

PARTITION BY le indica a la función ROW_NUMBER(), que va a numerar a partir de 1 por cada grupo de registro con diferente valor en el campo DEPARTMENT_ID.  ORDER BY le indica que va a numerar los registros de cada grupo de acuerdo al orden ascendente del valor del campo LAST_NAME

Veamos el fragmento del resultado que daría la consulta SQL anterior para entender mejor el funcionamiento:

Como vemos en el resultado, la numeración (columna NUMERO_CONSECUTIVO en el resultado) reinicia con 1 por cada valor de DEPARTMENT_ID distinto y los numera de acuerdo al orden del valor LAST_NAME: en el DEPARTMENT_ID “10” sólo existe 1 empleado y tiene el valor de “Whalen” en el campo LAST_NAME. En el DEPARTMENT_ID “20” existen 2 empleados con los valores “Fay” y “Hartstein” y los numeró de acuerdo al orden alfabético, a “Fay” le dió el NUMERO_CONSECUTIVO “1” y a “Hartstein” el 2. En el DEPARTMENT_ID “30” hay 6 empleados y los numeró del 1 al 6 de acuerdo al orden alfabético de LAST_NAME y así sucesivamente con el resto de los empleados.

Si existiera una clausula ORDER BY en la sentencia, el orden del despliegue de salida  sería por los campos indicados en dicha cláusula.

¿Dudas? ¿Preguntas? Deja tus comentarios. ¡Hasta la próxima!

 

 

Numerar los resultados de una consulta SQL en Oracle

Queremos que los resultados de una consulta SQL en una base de datos ORACLE sean numerados del 1 al total de registros o filas obtenidas en la consulta.

Para ello podemos utilizar la función ROW_NUMBER()  de la siguiente forma:

SELECT 
    ROW_NUMBER() OVER (ORDER BY department_name) AS numero_consecutivo,
    department_name 
FROM 
    departments;

Nos daría como resultado algo como esto:

En la sentencia SQL anterior, estamos indicando que numere los resultados de acuerdo al orden del campo DEPARTMENT_NAME (nombre del departamento) y le asigne a esa numeración el nomnre de NUMERO_CONSECUTIVO.  La cláusula ORDER BY en la función ROW_NUMBER() es obligatoria. Este ordenamiento es independiente de el orden que se le puede dar al resultado final. Si sólo existe el ordenamiento de la función ROW_NUMBER() en la sentencia SQL, el resultado de la consulta saldrá ordenado por el orden indicado en ésta. Por ejemplo la siguiente sentencia:

SELECT 
    ROW_NUMBER() OVER (ORDER BY department_name) AS numero_consecutivo,
    department_id,
    department_name 
FROM 
    departments
ORDER BY department_id;

En donde agregamos que muestre el campo DEPARTMENT_ID y que el resultado final lo ordene por éste mismo campo, daría como resultado esto:

Como se puede observar, el orden del resultado ahora es por el campo DEPARTMENT_ID, sin embargo la numeración es asignada de acuerdo al orden del campo DEPARTMENT_NAME. Como vemos el departamento  llamado “Accounting” sigue conservando el número 1 en la columna “NUMERO_CONSECUTIVO”, el departamento “Administration” el número 2 y así sucesivamente.

¿Dudas? Deja tu comentario.

¡Hasta la próxima!

 

Formatear campo fecha con sql en Oracle con la función to_char().

Varias formas de mostrar un campo fecha con la función to_char()  de sql en Oracle; asumimos en los ejemplos siguientes, que  el campo s.CREATED  es un campo de tipo date de una tabla cualquiera; abajo de cada uno se muestra la salida que obtendríamos para un mismo valor del campo aplicando la función to_char():

to_char(s.CREATED, 'YYYY-MM-DD HH24:MI:SS')
2008-10-20 17:04:22

to_char(s.CREATED, 'YYYY-MM-DD')
2008-10-20

to_char(s.CREATED, 'YYYY-MM-DD HH:MI:SS')
2008-10-20 05:04:22

to_char(s.CREATED, 'YYYY-MON-DD')
2008-OCT-20

to_char(s.CREATED, 'YYYY-MM-DD HH:MI:SS AM')
2008-10-20 05:04:22 PM

to_char(s.CREATED, 'YYYY/MM/DD HH24:MI:SS')
2008/10/20 17:04:22

¡Espero y les sea útil!

¡No olviden visitar a los anunciantes!¡Hasta la próxima!

sqldeveloper: MSVCR71.dll is missing.

Me bajé la más reciente versión de sqldeveloper, el sqldeveloper-3.2.09.30.zip, que viene junto con el jdk. En una máquina con el sistema operativo windows 7. Al descomprimirlo y ejecutarlo, éste no arrancaba y me mandaba el error de que no encontraba MSVCR71.dll. Buscando por ahí, encontré varias soluciones. La más sencilla fue copiar el MSVCR71.dll que se encuentra en la ruta <directorio-de-instalacion>/sqldeveloper/jdk/jre/bin al directorio <directorio-de-instalacion>/sqldeveloper/sqldeveloper/bin y listo. Al arrancar nuevamente la aplicación, ésta arrancó sin problemas.

La ventana de conexiones de SQL Developer de Oracle no aparece.

Después de instalar las librerias de desarrollo del cliente de Oracle 11g, mi SQL Developer comenzó a fallar. No mostraba la ventana de conexiónes y no era posible abrirla desde el menú view.
Esto se debe a que al instalar el ciente establece el directorio oracle por default al de la nueva instalación. Y al parecer hay alguna incompatibilidad entre los .jar que controlan las conexiones. Para solucionar esto tuve que hacer un archivo .bat donde especifico el ORACLE_HOME como el directorio donde se encuentra el directorio de instalación de mi SQL Developer y enseguida lanzo la aplicación.
Est ees el contenido de mi archivo .bat:

set ORACLE_HOME=%CD%
start sqldeveloper.exe

La primer línea permite que los directorios Oracle Home del registro de windows sean ignorados para que sólo use las librerias que trae consigo el SQL Developer.
Este .bat debe ser colocado en la carpeta de instalación de dicha aplicación.

Campo incremento en Oracle sin crear una Secuencia.

A veces es necesario generar en una consulta un campo que se incremente por si solo, de uno en uno. Para lograr esto Oracle cuenta con la funcion ROWNUM. Nos puede ser muy útil cuando queremos crear paginación de los resultados de una consulta en WEB.

Esta función permite generar una columna que va numerando de uno en uno los resultados de una consulta SQL. Pero hay que tener cuidado al utilizar esta función, ya que a veces su utilización puede hacerse incorrectamente.

Para una explicacion detallada de su uso te recomiendo este link, espero te sea de ayuda.

Ejemplo:

select ROWNUM, campo1, campo2 from tabla;