Oracle: Consulta para saber en qué tabla está una columna

Ayer veíamos cómo hacer esto en SQL-Server, cómo saber a qué tabla pertenece una columna a partir del nombre de esta. ¿Cómo se hace en Oracle? Pues tenemos también una consulta que nos lo dice, pero distinta:

select table_name from all_tab_columns where column_name='Nuestra_columna';

Cambiando el ‘Nuestra_Columna‘ por el término en cuestión.

Instalando Guest Additions de VirtualBox en Lubuntu 15.10

Primer contacto con una versión 15.10 de Ubuntu: esta mañana he tenido que montar una máquina vitual en el curro para un experimento. Por temas de ligereza ha sido un Lubuntu, la versión con el ligero escritorio LXDE, concretamente la vesión de 32 bits.

Vamos a meternos en harina (en el tema de las guest additions, no era un chiste sobre Albert Rivera) ¿Cómo instalo la Guest Additions?

  • Abrimos un terminal y ejecutamos sudo apt-get install virtualbox-guest-additions-iso
  • Le llevará un ratillo (al menos a mi me lo llevó). Al acabar vamos al menú desplegable de la esquina inferior izquierda, seleccionamos Preferencias y desde allí escogemos Software y Actualizaciones. Os dejo esta imagen ilustrativa:
    Lubuntu software actualizacións
  • Ahora nos queda desmarcar las opciones de usar los controladores de Virtual Box en lugar de los de serie del sistema operativo, tal que así: Software y Actualizaciones

Y tras un reinicio la cosa debería ir ya como la seda.

Instalar Oracle Java en Ubuntu

Hasta hace unos años Java, de Sun Microsystems, estaba totalmente disponible en los repositorios de Ubuntu. Tras la compra de Sun por parte de Oracle la cosa cambió, se bifurcó entre la versión OpenJava y la OracleJava.

En principio Ubuntu nos proveerá de la versión OpenJava, que debería cubrir todas las necesidades del usuario medio. Pero para el desarrollador puede ser interesante disponer de la versión de Oracle, o simplemente puede darse en algún momento el caso de que un usuario la necesita. Así que la cosa es tal que así:

#Añadir el repositorio a la lista
sudo add-apt-repository ppa:webupd8team/java

#actualizar repositorios
sudo apt-get update

#Instalar OracleJava 7
sudo apt-get install oracle-java7-installer

#Si quieres comprobar que se ha instalado correctamente puedes con
java -version

Listo y sencillo.

Limitar el número de filas en la salida de un consulta en Oracle

En fin, hoy primer contacto con el SGBD de Oracle (sí, ese privativo tan caro y a la vez tan extendido en la administración), del cual no puedo decir mucho porque con una clase, sobre fundamentos de SQL además (que no es por ir de sobrado, pero la primera semana me da que me voy a aburrir repasando lo más básico de siempre), pues no da para haber testado mucho. Lo que sí comprobé, tonteando un poco, es que la forma de forma de limitar el número de filas en la salida de una consulta no tiene nada que ver ni con SQL-Server, PostgreSQL o MySQL.

Porque claro, tú quieres por ejemplo sacar los 10 que más cobran y en MySQL o en PostgreSQL lo haces tal que así

SELECT nombre FROM empleados ORDER BY salario LIMIT 10

Y si eres de los de tito Bill te apañarías con:

SELECT TOP 10 nombre FROM empleados ORDER BY salario 

Total, que andaba trasteando un rato después de hacer los ejercicios, tipo “me ha sobrado un huevo de tiempo, vamos a probar si otras cosas van igual que en algunos de los sistemas gestore que he usado” y ahí me encuentro que esto cambia, que ni es como en Microsoft ni como en los otros dos SGBD libres. Aunque curiosamente la palabra limit aparezca como reservada (todavía no se para qué, una de las cosas que espero aprender en el susodicho curso). Tras un poco de investigación entre la (vasta) documentación de Oracle me ecuentro con que la cosa va así:

SELECT nombre FROM empleados ORDER BY salario WERE rownum<=10

Conclusión/explicación: Oracle nos ofrece una pseudocolumna (iba a llamarlo variable, pero acabo de leer que este es el término más correcto) llamada rownum (número de fila) que nos servirá, mediante una condición where, para limitar la salida de resultados de la consulta (también puede valer para realizar consultas paginadas en una web, pero igual te chupas demasiadas conexiones al motor si lo haces así en vez de bajar todo de vez y manejarlo en el cliente… ahí ya depende del proyecto). Si quieres 10 filas le dices “que el número de fila sea menor o igual que diez”, que quieres 20… lo mismo.

Diferencias de comandos entre T-SQL y PL/SQL

Esta tarde estuve mirando un poco de PL/SQL porque estoy apuntado en un par de ofertas de trabajo donde piden conocimientos básicos. En principio esta versión de SQL de Oracle  tiene la misma lógica y funciona más o menos igual que Transac SQL, pero hay alguna pequeña diferencia. Por lo que he indagado, algunos comandos cambian de uno a otro, ahí os inserto una lista.

 

CONCATENAR COLUMNAS

T-SQL = +

PL/SQL = ||

COMPROBAR VALOR NULO

T-SQL = ISNULL

PL/SQL = NVL

CONVERSIÓN DE TIPO DE DATO

T-SQL = CONVERT ()

PL/SQL = TO_DATE, TO_CHAR, TO_NUMBER (dependiendo del tipo)

COMPARACIÓN CON EL VALOR NULL

T-SQL = =NULL

PL/SQL = IS NULL

EXTRAER UNA PARTE DE UNA FECHA (DÍA, MES O AÑO) el ejemplo será con año

T-SQL = DATEPART (yy, DATE)

PL/SQL = EXTRACT (Year from DATE)

CREAR UN EQUAL JOIN

T-SQL = SELECT t1.field, t2.field FROM table1 t1 LEFT JOIN table2 ON t2.field = t1.field

PL/SQL = SELECT t1.field, t2.field FROM table1 t1, table2 t2 WHERE t1.field(+) = t2.field

SELECCIONAR UN NÚMERO CONCRETO DE FILAS

T-SQL = SELECT TOP seguido del número de columnas

PL/SQL = SELECT * FROM tabla1 WHERE rownum <= seguido del número de columnas

INCLUIR UN TEXO O UN NÚMERO EN LA SELECT:

T-SQL = SELECT ‘texto’

PL/SQL = SELECT ‘Texto’ FROM dual

ASIGNAR VALOR A UNA VARIABLE

T-SQL = SET var = val

PL/SQL = var := val

IMPRIMIR EN PANTALLA

T-SQL = PRINT ‘texto’

PL/SQL = dbms_output.put_line(“cadena de texto”)

CONDICIONAL IF

T-SQL = IF condicion THEN BEGIN bloque instrucciones END IF

PL/SQL = IF Condicion THEN — END IF;

Luego además, existen algunos comandos propios de TS/SQL y algunas funciones que existen en MySQL o SQL-Server no existen aquí por ser propios de esos gestores, pero grosso modo esto es lo que hay. Espero que os sea de ayuda.