¿Qué versión de SQLcl estoy ejecutando?

Esto es algo que descubrí hace unos minutos por pura coincidencia y que no está documentado por lo que sé.

sqlcl_version

Pueden introducir version o show version y con eso obtienen la versión completa de SQLcl que están ejecutando.


SQLcl: Obteniendo la herramienta y requisitos para su funcionamiento

En el post anterior les conté acerca de esta nueva herramienta llamada SQLcl. En esta ocasión les voy a mostrar cómo obtenerla y lo que se requiere para empezar a utilizarla.

Requisitos

SQLcl es una aplicación desarrollada en Java lo que le permite ser ejecutada en múltiples sistemas operativos como Windows, Linux, OS X y Solaris.

En primer lugar, necesitamos asegurarnos de que tenemos instalado un JRE (Java Runtime Environment) que sea compatible con la herramienta. La versión 4.2 de SQLcl necesita Java 1.8 o superior. Pueden obtener la versión más reciente de Java aquí.

En caso de ya tener Java instalado en su computadora, pueden confirmar la versión ejecutando java -version en una ventana de comandos o terminal.

java

Obtener la herramienta

SQLcl se encuentra disponible en OTN (Oracle Technology Network) y necesitamos crear una cuenta antes de poder descargar cualquier software o participar en los foros de discusión. Una vez que tenemos una cuenta, podemos ir a la página de SQLcl y descargar la herramienta.

Como podrán notar, es tan solo un archivo zip de aproximadamente 16 MB. Lo único que hay que hacer es extraer el archivo zip en un nuevo directorio y todo está listo para empezar a trabajar.

Ejecutar SQLcl

Para ejecutar SQLcl debemos abrir una ventana de comandos o un terminal y dirigirnos al directorio que especificamos al extraer el contenido del archivo zip y posteriormente hasta el directorio bin. En mi caso yo puse SQLcl en C:\Users\gbalda\sqlcl4.2.0.16.260.1205.

location

Una vez que nos encontramos en el directorio bin, solamente debemos escribir sql y presionar ENTER para ejecutar la herramienta y poder ingresar nuestras credenciales para conectarnos a una base de datos.

connect

En el próximo post les voy a mostrar algunas formas de conectarse a la base de datos y cómo obtener información sobre la conexión.


SQLcl: Una interfaz de línea de comandos moderna

Esta es una lista que sirve como referencia para enlazar a los otros posts sobre SQLcl:

  1. OTN Appreciation Day: SQLcl.
  2. SQLcl: Obteniendo la herramienta y requisitos para su funcionamiento.
  3. ¿Qué versión de SQLcl estoy ejecutando?

OTN Appreciation Day: SQLcl

SQLcl es una nueva herramienta creada por el mismo equipo que desarrolla y mantiene SQL Developer y SQL Developer Data Modeler.

La idea central al crear esta herramienta fue el tomar la funcionalidad existente en SQL*PLUS y agregarle elementos modernos que encontramos en un IDE como SQL Developer. El resultado es una interfaz de línea de comandos moderna en la que podemos (entre otras cosas):

Exportar datos en distintos formatos (insert, json, xml, csv, etc). Esta es probablemente mi opción favorita.

sqlcl_sqlformat1

Examinar la historia de comandos y sentencias SQL que hemos ejecutado.

history1

Asociar un alias a una sentencia SQL que utilizamos con frecuencia para reducir la cantidad de caracteres que debemos escribir.

sqlcl_alias

En los próximos días empezaré una serie de posts mostrando las bondades de la herramienta. Mientras tanto aquí les dejo un enlace a las diapositivas de la presentación que realicé en el Oracle Open World 2016.


Presentando en el Oracle Open World 2016

oow-160x160-im-speaking-3093277

Un post muy breve para anunciar que estaré presentando una sesión en los Fórums para Grupos de Usuarios. Gracias ODTUG!

SQLcl: A Modern Command Line Interface to the Oracle Database [UGF5641]

“In this session learn about the new Java-based command line interface that takes advantage of Oracle SQL Developer’s scripting engine. It delivers a modern command line interface that is backward compatible with SQL*Plus but also introduces new commands and features that have been missing for a long time. In this session, explore the new inline editing, query history, aliasing, output formatting, DDL generation, and scripting options that set SQLcl apart from its predecessor.”

Domingo, Sep 18, 8:00 a.m. – 8:45 a.m.| Moscone South—302

Ahí nos vemos!


Ebook: Una Lista de Verificación para Realizar Revisiones a los Diseños de Modelos de Datos

Una Lista de Verificación para Realizar Revisiones a los Diseños de Modelos de Datos

Un pequeño post para contarles que ya se encuentra disponible en Amazon.com el ebook (formato Kindle) “Una Lista de Verificación para Realizar Revisiones a los Diseños de Modelos de Datos”.

La edición en español es una traducción del original “A Check List for Doing Data Model Design Reviews” cuyo autor es el Oracle ACE Director Kent Graziano.

Aprovecho la oportunidad para agradecer a Kent por invitarme a participar en la traducción del ebook.


Mis Presentaciones en el Oracle Open World 2014

Un post muy breve para informarles de las dos presentaciones que voy a realizar en el Oracle Open World 2014.

Session ID:         UGF4482
Session Title:     “Getting Started with SQL Pattern Matching in Oracle Database 12c
Venue / Room:  Moscone South – 301
Date and Time:  9/28/14, 13:30 – 14:15

Session ID:          CON4493
Session Title:      “Regular Expressions in Oracle Database 101”
Venue / Room:   Moscone South – 303
Date and Time:   10/2/14, 13:15 – 14:00

No olviden de confirmar que las presentaciones sean en los salones que indico porque a veces hacen cambios de última hora.

Espero verlos por allá!


Nuevo en Oracle 12c: Consultar el contenido de una colección tipo arreglo en programas PL/SQL

En versiones previas a Oracle 12c, un programa PL/SQL no podía ejecutar una sentencia SQL que hiciera referencia a una colección de tipo arreglo (también conocidos como tablas en memoria). Esto es lo que sucede si trato de hacerlo en Oracle 11g.

SQL> drop table test_array purge;

Table dropped.

SQL> create table test_array as
  2  select level num_col from dual
  3  connect by level <= 10;

Table created.

SQL> select * from test_array;

   NUM_COL
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10                                                                      

10 rows selected.

SQL> drop package PKG_TEST_ARRAY;

Package dropped.

SQL> create or replace package PKG_TEST_ARRAY as
  2
  3    type tab_num is table of number index by pls_integer;
  4
  5  end PKG_TEST_ARRAY;
  6  /

Package created.

SQL> declare
  2    my_array pkg_test_array.tab_num;
  3  begin
  4    for i in 1 .. 5 loop
  5      my_array(i) := i*2;
  6    end loop;
  7
  8    for i in (
  9              select num_col from test_array
 10              where num_col in (select * from table(my_array))
 11             )
 12    loop
 13      dbms_output.put_line(i.num_col);
 14    end loop;
 15  end;
 16  /
            where num_col in (select * from table(my_array))
                                                  *
ERROR at line 10:
ORA-06550: line 10, column 51:
PLS-00382: expression is of wrong type
ORA-06550: line 10, column 45:
PL/SQL: ORA-22905: cannot access rows from a non-nested table item
ORA-06550: line 9, column 13:
PL/SQL: SQL Statement ignored
ORA-06550: line 13, column 26:
PLS-00364: loop index variable 'I' use is invalid
ORA-06550: line 13, column 5:
PL/SQL: Statement ignored

Como pueden ver, el operador TABLE está esperando una colección de tipo nested table o varray.

Esta limitación ha sido removida en Oracle 12c. Ahora el bloque PL/SQL se ejecuta sin problemas.

SQL> set serveroutput on
SQL>
SQL> drop table test_array purge;

Table dropped.

SQL> create table test_array as
  2  select level num_col from dual
  3  connect by level <= 10;

Table created.

SQL> select * from test_array;

   NUM_COL
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10                                                                      

10 rows selected.

SQL> drop package PKG_TEST_ARRAY;

Package dropped.

SQL> create or replace package PKG_TEST_ARRAY as
  2
  3    type tab_num is table of number index by pls_integer;
  4
  5  end PKG_TEST_ARRAY;
  6  /

Package created.

SQL> declare
  2    my_array pkg_test_array.tab_num;
  3  begin
  4    for i in 1 .. 5 loop
  5      my_array(i) := i*2;
  6    end loop;
  7
  8    for i in (
  9              select num_col from test_array
 10              where num_col in (select * from table(my_array))
 11             )
 12    loop
 13      dbms_output.put_line(i.num_col);
 14    end loop;
 15  end;
 16  /

2
4
6
8
10                                                                              

PL/SQL procedure successfully completed.

Otro ejemplo utilizando un join entre una tabla y la colección.

SQL> declare
  2    my_array pkg_test_array.tab_num;
  3  begin
  4    for i in 1 .. 5 loop
  5      my_array(i) := i*2;
  6    end loop;
  7
  8    for i in (
  9              select a.num_col, b.column_value
 10              from
 11                test_array a,
 12                table (my_array) b
 13              where
 14                a.num_col = b.column_value
 15             )
 16    loop
 17      dbms_output.put_line(i.num_col);
 18    end loop;
 19  end;
 20  /

2
4
6
8
10                                                                              

PL/SQL procedure successfully completed.

Muy interesante.


SQL Developer y la interfaz para trabajar con GIT: Interactuando con un repositorio GitHub Parte 2

En este post voy a mostrar la manera de sincronizar los repositorios remoto (GitHub) y local (PC) una vez que un archivo existente en local es modificado. Lo que voy a hacer es modificar el archivo sp_test_git.pls que se encuentra en el repositorio local y luego voy a transferir los cambios al repositorio remoto.

En primer lugar debo abrir el archivo sp_test_git.pls en SQL Developer, luego agrego otra línea dbms_output y finalmente guardo los cambios. En el momento que el archivo es modificado, la ventana Pending Changes (Git) se actualiza para reflejar los cambios y los íconos de la ventana se activan.

modify_file

En la ventana  Pending Changes (Git) puedo añadir un comentario y luego transferir el archivo a un área temporal (staging area) haciendo click en el botón Add. Algo que hay que notar es el cambio en el status del archivo que pasó de “Modified Not Staged” a “Modified Staged”.

staged_file

¿Qué hago si deseo si deseo comparar las versiones del archivo antes de confirmar los cambios en el repositorio local? Solamente debo hacer click en el ícono Compare with Previous Version que se encuentra en la ventana Pending Changes (Git).

compare2

El panel de la izquierda muestra la versión almacenada en el repositorio local y el panel de la derecha muestra la versión almacenada en el área temporal. La diferencia entre las dos versiones se encuentra resaltada para facilitar su identificación.

El siguiente paso es confirmar los cambios en el repositorio local. Para ello, debo hacer click en el botón Commit que se encuentra en la ventana Pending Changes (Git) y luego debo hacer click en el botón OK de la ventana Commit.

commit

Ahora la ventana Branch Compare muestra información indicando que los repositorios remoto y local no se encuentran sincronizados.

branch_compare2

El paso final consiste en sincronizar los repositorios remoto y local enviando los cambios a GitHub. Para lograrlo, voy al menú principal y hago click en  Team -> Git -> Push para abrir el asistente “Push to Git” donde ingreso el URL del repositorio remoto, el user name y el password para completar la operación. Luego voy a GitHub para asegurarme que los cambios fueron transferidos.

updated_github

 


SQL Developer y la interfaz para trabajar con GIT: Interactuando con un repositorio GitHub Parte 1

En mi último post mostré como clonar un repositorio GitHub usando SQL Developer. En este post voy a mostrar como sincronizar los repositorios remoto (GitHub) y local (PC) una vez que remoto ha sido modificado.

En primer lugar voy a utilizar la funcionalidad existente en GitHub para crear el archivo sp_test_git.pls y luego voy a actualizar el repositorio. Se puede crear un nuevo archivo haciendo click en el ícono señalado con la flecha roja.

new_file

El contenido del archivo es un procedimiento PL/SQL que muestra un mensaje.

file_content

En este momento los repositorios remoto y local ya no se encuentran sincronizados. Lo primero que se debemos hacer antes de empezar a trabajar con un repositorio es asegurarnos de que tenemos la versión más reciente del mismo, de tal forma que incluya todos los cambios realizados por otros desarrolladores. Procedamos a sincronizar remoto y local.

En primer lugar debemos asegurarnos de que la ventana Versions se encuentre abierta. Vamos al menú principal y hacemos click en Team -> Versions.

versions

Luego debemos recorrer la estructura del repositorio local hasta llegar a la derivación máster y la seleccionamos. Ahora vamos al menú principal y hacemos click en Team -> Git -> Fetch para abrir el asistente “Fetch from Git” y seguimos las instrucciones que son similares a a las que utilizamos para clonar el repositorio. Cuando se realiza una operación Fetch sobre un repositorio, lo que realmente ocurre es que se guarda una copia de los cambios del repositorio remoto en una ubicación temporal (en el PC) de manera que no se modifica ninguna de las derivaciones en el repositorio local. En ese momento tenemos la opción para solamente comparar los cambios (Compare) o también podemos incorporar los cambios (Merge) en el repositorio local. Los archivos que han cambiado se muestran en la ventana Branch Compare que aparece cuando vamos al menú principal y hacemos click en Team -> Git -> Branch Compare.

branch_compare

En la ventana Branch Compare podemos hacer click con el botón derecho sobre sp_test_git.pls y elegir Compare para ver las diferencias entre la versión remota y local de sp_test_git.pls.

compare

La ventana del lado izquierdo muestra la versión remota del archivo y la ventana de la derecha muestra la versión local. En este caso la ventana de la derecha se encuentra vacía ya que el archivo es nuevo y no existe una copia previa en el repositorio local. Podemos incorporar los cambios al repositorio local en forma definitiva haciendo click con el botón derecho sobre sp_test_git.pls, eligiendo Merge y haciendo click sobre el botón “Ok”.

merge

Ahora podemos ir al directorio que contiene nuestro repositorio local y confirmar que sp_test_git.pls se encuentra ahí.

local_update