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!

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!

 

Localizar una cadena de caracteres dentro de un campo en Oracle

A veces nos vemos en la necesidad de saber si en el valor de un campo de una tabla en Oracle se encuentra cierto caracter o secuencia de caracteres.

Oracle cuenta con la función INSTR para llevar a cabo esta tarea. La función regresa un número entero que indica la posición dentro de la cadena de caracteres que contiene el campo de el o la secuencia de caracteres buscados. Por ejemplo la siguiente instrucción:

select ename as "Nombre", instr(ename, 'RK', 1, 1) as "Posicion de RK" from emp;

Mostrará el nombre y la posición de la cadena RK dentro del nombre:

Como se muestra en los resultados, solo la fila con el valor de CLARK en la columna Nombre tiene el valor de que representa la posición inicial de la cadena RK en dicha columna.

¿Que representan los 4 valores o parámetros en la función INSTR? El primer parámetro es la cadena de caracteres donde se va a hacer la búsqueda, en este caso la columna ename de la tabla empEl segundo parámetro es la cadena que buscamos, en este caso RK. El tercer parámetro indica a partir de cual caracter queremos hacer la búsqueda, en este caso desde el caracter 1. El cuarto y último parámetro de la función indica que número de ocurrencia queremos encontrar, en este caso la primera ocurrencia; por ejemplo si quisiéramos encontrar la segunda ocurrencia de la cadena R en el Nombre sería:

select ename as "Nombre", instr(ename, 'R', 1, 2) as "Posicion de RK" from emp;

Lo que nos arrojaría los siguientes resultados:

Como se puede observar, sólo en el nombre TURNER encontró una segunda ocurrencia de la cadena en la posición 6. El nombre CLARK, sólo tiene una ocurrencia de R por lo que el resultad arroja 0, es decir, no encontrado.

Ahora, ¿y si ponemos un número negativo en el parámetro que indica a partir de que caracter queremos buscar? Así:

select ename as "Nombre", instr(ename, 'R', -1, 2) as "Posicion de R" from emp;

Le estamos indicando que la búsqueda la haga de derecha a izquierda (de revesa) comenzando por la primera posición.  Esto nos daría el resultado siguiente:

Como podemos observar, ahora la consulta nos muestra el nombre TURNER y la posición de R en 3, que es la segunda ocurrencia de la R en TURNER pero de derecha a izquierda a partir de la posición 1 (contando de derecha a izquierda)Si le indicamos un -2 en la posición desde dónde queremos la búsqueda, buscará desde el penúltimo caracter hacia la izquierda, lo que nos dará un resultado de 0 en todas las filas, porque no hay ningún nombre que cumpla con la condición:

select ename as "Nombre", instr(ename, 'R', -2, 2) as "Posicion de R" from emp;

¿Alguna duda? Deja tu comentario.

¡Hasta la próxima!

 

Oracle lanza la version 12c de su Base de Datos

“Con las sucesivas versiones de Oracle Database, Oracle sigue facilitando las tareas de estandarización, consolidación y automatización de servicios de base de datos en la nube para nuestros clientes. Lo que empezó hace más de una década con funciones innovadoras como Oracle Real Application Clusters y Oracle Automatic Storage Management, continúa ahora con Oracle Multinenant que permite a los departamentos de TI aprovechar al máximo las ventajas de la nube, incluido el uso compartido de recursos, la flexibilidad de gestión y el ahorro de costes.”

Así empieza la presentación de “Oracle Database 12c, la primera base de datos del mundo diseñada para la nube”.

Para los desarrolladores ya se encuentra para su descarga en esta página.

Habrá que probarla.

 

Especificando numero de intentos de login a Oracle

Para evitar que un usuario de Oracle sea bloqueado despues de varios intentos fallidos de login se puede proceder a hacer lo siguiente:

Entrar a sqlplus como SYSDBA.

Ejecutar las sigueintes instrucciones

select profile from dba_users where username = ‘usuario’;

Para averiguar el profile a la que pertenece el usuario.

select resource_name, limit from dba_profiles where profile = ‘DEFAULT’;

Listar los limites y recursos del profile (en este caso, el profile DEFAULT)

alter profile default limit failed_login_attempts unlimited;

Para cambiar a no limitado, el recurso failed_login_attempts. Con lo cual la cuenta no se bloqueará sin importar el numero de intentos fallidos de login.

Nota: es recomendable limitar los intentos a un numero especificado por razones de seguridad.

Saludos!

Iniciar Oracle 10g en Solaris

Inicie sesión con el usuario oracle, vaya al directorio bin dentro del directorio donde se instaló el Oracle y ejecute el siguiente comando:

sqlplus /nolog

aparece la linea de comando SQL>. Ahi ejecute el comando:

connect sys/contraseña as sysdba

donde contraseña es la contraseña del usuario sysdba. Debe aparecer el mensaje “Connected to an idle instance”, enseguida escriba:

startup

deben aparecer varios mensajes y al final uno que dice “Database opened.”

Si es así, la base de datos está lista para recibir conexiones.

Si la base de datos no acepta conexiones remotas, puede deberse a que el proceso escuchador (listener) no se está ejecutando. En ese caso inícielo con el siguiente comando:

lsnrctl start