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

domingo, 26 de enero de 2020

Preparando entorno de desarrollo para JAVA

Año 2015, buenos recuerdos en cuanto al desarrollo de software - año donde inicie haciendo uso del lenguaje JAVA, plataforma informática que actualmente le pertenece a ORACLE, sin mayor detalle quiero compartirles la información necesaria para iniciar el desarrollo en el mencionado lenguaje (de paso nos actualizamos 😅)

Iniciemos con la preparación del entorno de desarrollo para JAVA, en este apartado no se hablara acerca de qué es JAVA o profundizaremos acerca de términos o sintaxis:
  1. Iniciar con descargas:
  2. Todas las descargas necesarias:

    Descargamos el IDE de Eclipse ingresando a la pagina oficial de: www.eclipse.org

    Ubicamos el botón descargas o Download, más adelante descargaremos la primera opción de Eclipse IDE for Enterprise Java Developers .
    Clic en opción de Download Packages a bajo del botón Download 64 bit (para ver más ediciones).

    Selecciona la opción de Eclipse IDE for Java Developers  y clic en descargas:
    Clic en Download Links: Windows 64-bit
    Clic en Download par iniciar la descarga

    Seguidamente descargamos el JDK v8 ingresando a la pagina de: Downloads - jdk8 descargar la primera opción de Java SE Development Kit 8u241 (la segunda incorpora ejemplos de Java SE Development Kit 8u241 Demos and Samples Downloads).
    Clic en dk-8u241-windows-x64.exe

    Para finalizar con las descargas, ingresar a la página de oficial de Apache Tomcat® y descargamos la versión 8.
    Clic en la versión 8 - lado izquierdo de la página
    Seleccionamos la opción de 64-bit Windows zip para iniciar la descarga

    Con estas 3 descargar realizadas iniciaremos la instalación y configuración necesaria e iniciar nuestros desarrollos bajo el lenguaje JAVA de Open Source.

  3. Instalación de IDE + JDK:
  4. IDE de Eclipse:

    En mi caso realice la descarga del la versión portable, inicio descomprimiendo el archivo - la ubicación depende de cada uno de ustedes - en C:\eclipse-workspace se descargará toda la metadata en el directorio C:\eclipse-workspace\.metadata
    Te sugiero sacar una copia de seguridad antes de iniciar el uso o configuraciones del IDE

    La carpeta .metadata es un área donde complementos de Eclipse pueden guardar cualquier información que quieran almacenar e incluirá elementos como su configuración de preferencia y el índice que utiliza el complemento de Java para encontrar clases y métodos rápidamente.

    JDK de JAVA:

    Les recomiendo ver el siguiente vídeo (gracias a La Geekipedia De Ernesto), lo principal es descargarse el .EXE correcto de acuerdo al Sistema Operativo donde se  instalará.

    Después de realizar la instalación del JDK, validaremos la versión de JRE instalado, ingresamos las línea de comando java -version en el CMD del Windows:

    C:\..\..>java -version
    java version "1.8.0_241"
    Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
    Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

  5. Configuración de Apache Tomcat:
  6. Descomprimimos el archivo apache-tomcat-8.5.50-windows-x64.zip en la unidad C:\servers-java\apache-tomcat-8.5.50 e iniciamos a crear una variable de entorno; para esto realizamos lo siguiente:

    Presionamos la tecla Inicio y escribimos variable, clic en Editar las variables de entorno del sistema y cargará la ventana de Propiedades del sistema.
    Clic en Variables de entorno

    Y veremos las variables de entorno del usuario y del sistema que actualmente existen; para el uso de Tomcat crearemos una variable del sistema.
    Clic en Nueva

    Definimos el nombre de CATALINA_HOME Y agregamos Valor de la variable (ruta donde los archivos de Tomcat) y clic en Aceptar

    Ahora que acabamos de crear la nueva variable del sistema (CATALINA_HOME); necesitamos agregar al Path del Sistema:
    Seleccionar Path y clic en Editar
    Clic en Nuevo e ingresmoa %CATALINA_HOME%\bin y clic en Aceptar

    Clic en la opción Aceptar de la ventana de Variable  de entrono y Propiedades del sistema.
    Para finalizar la configuración te sugiero reiniciar el equipo para poder validar la funcionalidad de la variable de sistema agregado.

    Después de reiniciar el equipo ejecuta el siguiente comando desde CMD catalina version para ver la descripción completa de Apache Tomcat®:

    C:\..\..>catalina version
    Using CATALINA_BASE: "C:\servers-java\apache-tomcat-8.5.50"
    Using CATALINA_HOME: "C:\servers-java\apache-tomcat-8.5.50"
    Using CATALINA_TMPDIR: "C:\servers-java\apache-tomcat-8.5.50\temp"
    Using JRE_HOME: "C:\Program Files\Java\jdk1.8.0_241"
    Using CLASSPATH: "C:\servers-java\apache-tomcat-8.5.50\bin\bootstrap.jar;C:\servers-java\apache-tomcat-8.5.50\bin\tomcat-juli.jar"
    Server version: Apache Tomcat/8.5.50
    Server built: Dec 7 2019 19:19:46 UTC
    Server number: 8.5.50.0
    OS Name: Windows 10
    OS Version: 10.0
    Architecture: amd64
    JVM Version: 1.8.0_241-b07
    JVM Vendor: Oracle Corporation

    Ahora iniciamos el servicio de Apache Tomcat® (recuerda que el servicio se llama configurado e instaldo para Tomcat se llama catalina), ingresa a CMD y ejecutar el siguiente comando:
    C:\..\..>catalina start
    Clic en Permitir acceso

    Servicio Apache Tomcat® Arriba - Listo para poder deployar nuestras aplicaciones.

    Ingresa al browser de tu preferencia e ingresa http://localhost:8080/
    Por defecto la configuración toma el puerto 8080, sin embargo puedes modificar en caso deseas usar otros puertos, sigue los siguientes pasos:
    Detenemos el servicio con el comando stop ejecutando desde el CMD.
    Ubicamos el archivo de server.xml que se encuentra en el directorio conf (C:\servers-java\apache-tomcat-8.5.50\conf); o simplemente puede hacer uso de la variable %CATALINA_HOME%\BIN desde el CMD y regresar con el comando cd.. y llegar a la ruta de conf

    Editamos el archivo que ubicamos en el directorio conf; desde el CMD estando en la ruta C:\servers-java\apache-tomcat-8.5.50\conf ingresamos el nombre del archivo xml server.xml y presionamos enter y nos sugiera abrir el archivo en blog de notas - clic en aceptar - y realizamos los cambios necesarios:
    Realiza una búsqueda del puerto 8080 y cámbialo al puerto por la que desee (en mi caso por el 8180) y guarda los cambios

    Para finalizar vuelva a levanta el servicio con el comando start ejecutando desde el CMD:
    Ingresa al browser de tu preferencia e ingresa http://localhost:8180/

  7. Línea de comandos en Windows10:
  8. Usados desde el CMD:

    java -version para ver la versión y descripción de JAVA.
    catalina version para ver la ubicación de los jar, servidor, sistema operativo, arquitectura, vendedor del producto y otros.
    catalina start para iniciar el servicio Tomcat llamada catalina
    cd.. para regresar al directorio anterior
    dir para ver el contenido de un directorio

  9. Ejecutando mi primer aplicación en Java:
  10. Crear un proyecto de tipo consola:


    Crear el siguiente método y ejecuta en programa:
    public class ClassTest01 {
           public static void main(String[] args) {
                 System.out.println("Nuestro entorno de desarrollo para JAVA ya esta OK...\n"
                               + "Sin embargo aún no se podra ejecutar aplicaciones como JSF, WS u otros...\n"
                               + "Descarguemos Eclipse IDE for Enterprise Java Developers");
           }
    }
    Resultado de la ejecución de programa:

    Para ejecutar proyectos con Apache Tomcat® necesitaremos configurar desde nuestro  IDE Eclipse IDE for Enterprise Java Developers:
Agradecer de antemano por la revisión y lectura de este apartado que fue desarrollado y publicado con la intención de  repasar y actualizarme con la nuevas tecnologías en relación a JAVA.

miércoles, 11 de mayo de 2016

Parámetro de entrada y salida – PL/SQL

Parámetro de entrada y salida – PL/SQL:
Los parámetros de entrada y salida no son los parámetros de inicialización de la base de datos ORACLE. Los parámetros de entra y salida son utilizados mayormente en implementaciones de funciones, procedimientos almacenados o bloques de código bajo el lenguaje del PL/SQL, se considera que ambos parámetros (entra y salida) puedan realizar operaciones en el mismo bloque PL/SQL, es decir, si enviamos un parámetro de entrada hará que cumpla cierta operación y retornara los valores de salida de dicha operación procesada de acuerdo al parámetro de ingresado. Es de acuerdo al caso que nos presenta en la implementación.
Algo importante al definir los parámetros, es saber y considerar cuántos tipos de parámetro existe si solo hablamos de entrada y salida, en realidad mi determinación seria 3 tipos:

Parámetros:

IN – entrada
OUT – salida
IN OUT – entrada salida

Parámetro IN – entrada:
El comportamiento común de estés tipos de parámetros es estar siempre pendiente de recibir un dato para ser procesada según él dato. Acepta valores por defectos haciendo uso del operador de asignación (:=) o utilizando la palabra reservada DEFAULT.

Parámetro OUT – salida:
Los parámetros de salida inicialmente arrancan como NULL, es decir al iniciar el proceso el parámetro estará como nulo o en todo caso, puede tomar un valor inicial y ser cambio durante la ejecución del proceso; y al finalizar el proceso se encarga de tomar o asignar el último valor al parámetro de salida.

Parámetro IN OUT – entrada salida:
Los parámetros de entra salida comúnmente cumplen las 2 funcionalidades arriba mencionadas con la diferencia de que si no defines un valor de entra te retornará el valor nulo o según la condición del proceso que está realizando (Ver el ejemplo, líneas abajo) o caso contrario mostrará el valor de entrada según definido inicialmente.

Ejemplo:

Para el siguiente ejemplo planteare el siguiente caso:
Nos piden mostrar los registros EMPLOYEE_ID, MANAGER_ID, DEPARTMENT_ID de cualquiera de los empleados según el EMPLOYEEID, así mismo, debemos mostrar el campo DEPARTMENT_NAME sólo cuando el DEPARTMENT_ID sea igual a 50; además nos piden mostrar la fecha actual de ejecución del proceso y mostrar opcionalmente el mes actual en texto o en todo caso mostrara el mensaje definido - MES NO DEFINIDO (cuando el parámetro sea vacío u otro mes diferente al actual).
/*Se recomienda leer y considerar todos los comentarios detallados, 
  para su mayor entendimiento de la solución del caso propuesto */
CREATE OR REPLACE PROCEDURE Demo_DataInOutEmployees(
  --Parámetro de 
  p_EMPLOYEEID        IN NUMBER,--Entrada
  pou_EMPLOYEE_ID     OUT EMPLOYEES.EMPLOYEE_ID%TYPE,--Salida
  pou_MANAGER_ID      OUT EMPLOYEES.MANAGER_ID%TYPE,--Salida   
  pou_DEPARTMENT_ID   OUT EMPLOYEES.DEPARTMENT_ID%TYPE,--Salida  
  pou_DEPARTMENT_NAME OUT DEPARTMENTS.DEPARTMENT_NAME%TYPE,--Salida
  pou_DAY_CONSULT     OUT DATE,--Salida
  pou_MONTH_TEXT      IN OUT VARCHAR2--Entrada Salida
)
AS
BEGIN
      --@1 Inicio primer bloque - Recuperar datos de la tabla employees
      BEGIN
        pou_EMPLOYEE_ID :=100;--Por default, pero, puede ser cambando según el 
                              --proceso (según el select que nos retorna) 
        SELECT EMPLOYEE_ID, 
              MANAGER_ID,   
              DEPARTMENT_ID,
              SYSDATE(),
              CASE 
                  --WHEN TO_CHAR(TO_DATE('11/05/2016'),'MM') = '05' THEN 'MAYO'
                  --La condición del proceso a realizar es, que sí ingresamos 05 (referencia 
                  --al mes de MAYO) nos debería pintar como respuesta MAYO, caso contrario el
                  --mensaje NO ES EL MES ACTUAL
                  WHEN TO_CHAR(TO_DATE('11/05/2016'),'MM') = pou_MONTH_TEXT THEN 'MAYO'
                  ELSE 'MES NO DEFINIDO' END MES
        INTO  pou_EMPLOYEE_ID,
              pou_MANAGER_ID,
              pou_DEPARTMENT_ID,
              pou_DAY_CONSULT,
              pou_MONTH_TEXT
        FROM EMPLOYEES WHERE EMPLOYEE_ID = p_EMPLOYEEID;
      EXCEPTION
        WHEN no_data_found THEN
          pou_EMPLOYEE_ID:=NULL;
          pou_MANAGER_ID:=NULL;
          pou_DEPARTMENT_ID:=NULL;
      END;
      --@1 Final primer bloque - Recuperar datos de la tabla employees
      
      --@2 Inicio segundo bloque - Recuperar el DEPARTMENT_NAME. 
      --Solo sí el pou_DEPARTMENT_ID sea 50, caso contrario devolver CERO (0).
      --Considerando: Que sí el pou_DEPARTMENT_ID sea 50 y no se encuentra data
      --el parametro de salida devolvera null
      BEGIN
        if (pou_DEPARTMENT_ID = 50) THEN
            BEGIN
              SELECT  DEPARTMENT_NAME
              INTO    pou_DEPARTMENT_NAME
              FROM    DEPARTMENTS WHERE DEPARTMENT_ID=pou_DEPARTMENT_ID;
            EXCEPTION
              WHEN no_data_found THEN
                pou_DEPARTMENT_NAME:=NULL;--Null, no hay data a pesar de ser pou_DEPARTMENT_ID = 50
            END;
        ELSE
          begin
            pou_DEPARTMENT_NAME:=0;--0, diferente - pou_DEPARTMENT_ID != 50
          end;
        end if;
      end;      
      --@2 Inicio segundo bloque - Recuperar el DEPARTMENT_NAME- 
      
      --Pasar los datos recuperados a los parámetros de tipo OUT - Salida
      pou_EMPLOYEE_ID     :=pou_EMPLOYEE_ID;
      pou_MANAGER_ID      :=pou_MANAGER_ID;
      pou_DEPARTMENT_ID   :=pou_DEPARTMENT_ID;
      pou_DEPARTMENT_NAME :=pou_DEPARTMENT_NAME;
      pou_DAY_CONSULT     :=pou_DAY_CONSULT;
      pou_MONTH_TEXT      :=pou_MONTH_TEXT;
END Demo _DataInOutEmployees;

Consideración:
La palabra reservada para la implementación de parámetros de entrada es IN y se declara en la cabecera o al principio de una función, procedimiento almacenado o bloque acompañado de un tipo de dato, no se considera la longitud de data (ejemplo – varchar2(50), numeric(5)… no es considerado). Las mismas consideraciones se tienen con los parámetros OUT e IN OUT.

miércoles, 4 de mayo de 2016

Convertir expresión con TO_NUMBER - PL/SQL

Función TO_NUMBER():
Se encarga de convertir una expresión (expr) en un valor de tipo de dato NUMBER. Es decir el valor de la expresión (expr) puede ser un valor de tipo de dato  CHAR, VARCHAR2, NCHAR, NVARCHAR2 o BINARY_DOUBLE.

Sintaxis.

TO_NUMBER(expr [, fmt [,nlsparam ] ])

Ejemplo:

Convertir la expresión de tipo de dato VARCHAR2, haciendo uso de la función TO_NUMBER().
DECLARE
      pVARCHAR2 VARCHAR2(50) := '59300.65';--Considerar la cantidad de enteros y decimales en la entrada de datos, es decir si
                                                    --la entrada contiene 5 enteros y 2 decimales (ejemplo - 59300.65 cincuenta y nueve mil 
                                                    --trecientos con sesenta y cinco), nuestro dato de salida debe soporta la longitud de
                                                    --5 enteros y 2 decimas (ejemplo de retorno, '99999.99')
      pNUMBER NUMBER ;
      pNUMBER2 NUMBER; 
BEGIN           
      pNUMBER := TO_NUMBER(pVARCHAR2,'999999999999999999.99');--Incluye los decimales... ejmplo 59300,65
      pNUMBER2:= TO_NUMBER(pVARCHAR2,'999999999999999999D99');--Excluye los decimales...  ejemplo 5930065       
      
      DBMS_OUTPUT.PUT_LINE('Conversion usando punto : ' || pNUMBER);
      DBMS_OUTPUT.PUT_LINE('Conversion usando la letra D : ' || pNUMBER2);
END;
Para poder convertir una expresión en cualquier parte de nuestra implementación sería lo optimo crear una función que realice todo esta conversión, y hacer referencia a dicha función creada.
CREATE OR REPLACE FUNCTION FN_FORMATEO_EXPRESION(
       pVARCHAR2 IN VARCHAR2
) 
RETURN NUMBER IS
  pNUMBER NUMBER;
BEGIN
  pNUMBER := TO_NUMBER(pVARCHAR2 ,'99999999999.99');
  
  RETURN pNUMBER ;
END FN_FORMATEO_EXPRESION;

Validar la función creada:
SELECT MI_ESQUEMA.FN_FORMATEO_EXPRESION('59300.65') FROM DUAL;
Consideraciones:
- Puedes especificar una expresión de tipo BINARY_FLOAT. Sin embargo, no tiene relevancia en hacerlo porque un tipo float solo puede ser interpretado por su presentación interna.
- No es compatible con los datos CLOB directamente. Sin embargo, CLOB se pueden pasar como argumentos a través de la conversión de datos implícita.
- El argumento nlsparam, en esta función tiene el mismo propósito que en la función TO_CHAR(). Además puedes dar el formato (fmtde la mascará haciendo uso de la función TO_CHAR().
- La función NVL() se puede utilizar a partir de Oracle 10g y Oracle 11g.

lunes, 18 de abril de 2016

Habilitar Usuario HR Oracle

Al realizar la primera instalación del Oracle, el usuario HR por defecto está bloqueado y por ende no podemos loguearnos como dicho usuario, lo que debe hacer son los siguiente pasos, aplicables para Linux o Windows.

1. Conectarse como usuario system o sysdba + contraseña haciendo uso del comando connect.

Usuario: system
Password: xxxx 



2. Hacer uso  del comando alter user hr account unlock desbloqueamos la cuenta.

alter user hr account unlock;

3. Escribimos el comando alter user HR identified by hr; con esto estamos diciendo que la contraseña será hr.

alter user HR identified by hr;


4. Ahora testeamos la conexión con el comando - conn hr/hr@xe. Si deseas después de conectarnos se puede realizar un select a la tabla employees del hr.


Resultado del select realizado

5. Con todos estos pasos realizados ya podemos logearnos desde cualquier IDE como el usuario hr  y la contraseña hr que definimos en el paso 3. 

Para finalizar nos loguearemos con el IDE Oracle SQL Developer.

Espero les sea de utilidad, gratitud a Dios nuevamente😊y gracias a todos ustedes por la acogida de este post, éxitos y bendiciones 🙏 y un gran abrazo a todos, y cuidarse como siempre ✌...!!!.

jueves, 4 de febrero de 2016

Usuario SYS y SYSTEM - ORACLE

Usuario SYS y SYSTEM
Ambos usuario son creados de forma automática al crear la base de datos ORACLE y se otorga el rol de DBA.

SYS (password por defecto: CHANGE_ON_INSTALL).
SYSTEM (password por defecto: MANAGER).

Lo que se recomienda es cambiar el password de ambos usuarios por el tema de seguridad.

SYS:
Todas las tablas y vistas para el diccionario de datos de la base de datos están almacenados en el esquema SYS. Estas tablas y vistas son críticas para el funcionamiento de la base de datos ORACLE. Para mantener la integridad del diccionario de datos, las tablas del esquema SYS son manipulados solo por la base de datos. Nunca se debería modificar algo o crear tablas en el esquema del usuario SYS.

SYSTEM:
El usuario SYSTEM se utiliza para crear tablas y vistas adicionales que muestran información administrativa, tablas internas y vistas utilizado por varias opciones y herramientas de la base de datos ORACLE. No se recomienda utilizar el esquema SYSTEM para almacenar tablas de interés para usuarios no administrativos.

sábado, 9 de enero de 2016

Ver la versión de una base de datos Oracle

Al iniciar la implementación en una base de datos lo primero que se debe saber es la versión de la base de datos Oracle, en el cual implementaremos. Considerando la verificación de la versión dependerá todo lo que se hará, salvo que nosotros mismo instalamos la base de datos.

Bueno para esto en oracle 10g y 11g (en lo que e logrado verificar), se logra verificar la versión del producto instalado con los siguientes queries.

El primer queries nos mostrada todo en una sola columnas, es decir nos muestra en una vista dinámica:

SELECT * FROM v$version; 


El segundo queries se hace desde la tabla product_component_version, obtenemos los mismos datos separados por columnas:

SELECT * FROM product_component_version;



martes, 1 de diciembre de 2015

RAISE_APPLICATION_ERROR - PL/SQL

RAISE_APPLICATION_ERROR – PL/SQL:

En muchas oportunidades al implementar líneas de queries en PL/SQL se necesita controlar ciertos proceso, para ello se logra enviando mensajes de errores personalizado al producirse una excepción. La instrucción a utilizar es el RAISE_APPLICATION_ERROR:

Sintaxis:
RAISE_APPLICATION_ERROR(<error_num>,<mensaje>); 

Ejemplo:
/*Se recomienda leer y considerar todos los comentarios detallados para su mayor entendimiento del pequeño ejemplo*/
DECLARE
   count_rows NUMBER;
BEGIN
   SELECT COUNT(*) INTO count_rows FROM employees;
   IF count_rows > 200 THEN--Si la condición no se cumpliera
      /* Generamos nuestro propio error(ORA -20101) con nuestro mensaje personalizado*/
      raise_application_error(-20101, 'Debe existrir como mínimo 200 registros');
   ELSE
      --Generamos el proceso si cumple la condición < 200
      null;
   END IF;

END;

Con estos detalles quiero dar por iniciado sobre el tema de las excepciones - Exception:

sábado, 7 de noviembre de 2015

Pivot PL/SQL - ORACLE 11G

En Oracle 11g una de las muchas funcionalidades incorporada en dicha versión es la solución a muchos de nuestro problemas, que en versiones anteriores teníamos que recurrir a la expresión CASE.

Recordemos que el operador Pivot se encarga de presentar información en un informe con referencias cruzadas con formato de planilla de cálculo a partir de cualquier tabla relacional usando código PL/SQL intermedio (dependiendo el caso que se presente), y almacena dichos datos en una tabla con referencias cruzadas de un determinado almacén (base de datos).

Además en el mundo de BI o OLAP un pivot es conocido como tablas de doble entrada, multidimensionales o simplemente conocidos con cross table (tablas cruzadas).

Consideracioness:
Son utilizadas asociadas a funciones de agrupamiento tales como SUM, COUNT, MIN, MAX, entre otros.
Se recomienda usar alias cuando se va a realizar más de una función agregada.
El título de la columna corresponderá a la lista de valores o alias de cada valor que agrega en el operador FOR.
Además se recomienda especificar el alias para que el valor tomará el alias.
No se recomienda usar funciones de agregación en el operador FOR, para esto se recomienda hacer uso de vistas.

Sintaxis:
Select * from nombre_tabla  -- Origen de datos
Pivot  --Operador Pivot
( fn_agregada_1() Alias_1,  -- Funciones agrupadas a mostrar
  Fn_agregada_2() Alias_2,
 For (campo_1 Alias_1 ,
      Campo_2 Alias_2  -- Campos donde se genera el pivot)
      In(Lista de valores)  -- Filtros para generar las columnas

 )
Para el siguiente ejemplo de nuestra implementación haciendo uso del operador Pivot haremos uso de la tabla employees de la Schema HR.

1. Construir query de origen de datos.


SELECT  DEPARTMENT_ID, TO_CHAR(HIRE_DATE,'YYYY'), SUM(SALARY)
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IS NOT NULL
AND     SALARY IS NOT NULL
AND     DEPARTMENT_ID BETWEEN 50 AND 100
GROUP BY DEPARTMENT_ID, TO_CHAR(HIRE_DATE,'YYYY')
ORDER BY DEPARTMENT_ID, TO_CHAR(HIRE_DATE,'YYYY');




Lo que nuestro query hace es mostrar los departamentos que se encuentra en el rango del 50 al 100 en determinados años y agrupados en ambos, así mismo muestra la suma del salario según los principales datos. En el siguiente caso nos pide mostrar la suma del salario por todos los año según el DEPARTMENT_ID. Para este caso, lo primero que se nos ocurre es transponer las filas a columnas.  

2. Recordemos a la implementa con la expresión CASE.


SELECT  DEPARTMENT_ID,
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2001' THEN SALARY ELSE 0 END) AS "AÑO-2001",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2002' THEN SALARY ELSE 0 END) AS "AÑO-2002",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2003' THEN SALARY ELSE 0 END) AS "AÑO-2003",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2004' THEN SALARY ELSE 0 END) AS "AÑO-2004",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2005' THEN SALARY ELSE 0 END) AS "AÑO-2005",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2006' THEN SALARY ELSE 0 END) AS "AÑO-2006",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2007' THEN SALARY ELSE 0 END) AS "AÑO-2007",
          SUM( CASE TO_CHAR(HIRE_DATE,'YYYY')
               WHEN '2008' THEN SALARY ELSE 0 END) AS "AÑO-2008"
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IS NOT NULL
AND     SALARY IS NOT NULL
AND     DEPARTMENT_ID BETWEEN 50 AND 100
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID;



Todo bien hasta ahora, se logró lo que nos solicitaron, pero, que pasa sí es que tenemos muchos años más de lo que hasta ahora mostramos, es decir los años desde el 1980 al 2015, tendríamos que replica 35 veces nuestra función de agrupamiento de nuestra expresión CASE. 
   
3. Crear la vista con el query de origen de datos (no siempre es necesario crear vistas).


CREATE OR REPLACE VIEW V_EMPLOYEES_HIRE_DATE
AS
SELECT  DEPARTMENT_ID, TO_CHAR(HIRE_DATE,'YYYY') AS HIRE_DATE, SALARY
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IS NOT NULL
AND     SALARY IS NOT NULL
AND     DEPARTMENT_ID BETWEEN 50 AND 100;

4. Ahora veremos la implementación con el Operador Pivot, lograremos el mismo resultado pero con menos línea de código.

SELECT * FROM (SELECT  DEPARTMENT_ID, HIRE_DATE, SALARY
                FROM    V_EMPLOYEES_HIRE_DATE )
                PIVOT
                (SUM(SALARY)
                      FOR HIRE_DATE IN (2001,2002,2003,2004,2005,2006,2007,2008)
                      )
ORDER BY 2 DESC;

Lo que se logra con el operador Pivot es que los filtros para la construcción de las columnas, solo será cuestión de agregar nuevos valores (FOR HIRE_DATE IN (2001,...., nuevo_filtros)) en el operador FOR.

jueves, 1 de enero de 2015

Oracel SQL Developer

¿Qué es Oracel SQL Developer?
Oracel SQL Developer es una herramienta gráfica gratuita diseñada por ORACLE para mejorar su productividad y simplificar el desarrollo de tareas a nivel de base de datos en el día a día. Así mismo, nos facilita con sólo unos pocos clics poder crear procedimientos almacenados, funciones, vistas, secuencias entre otras declaraciones SQL. 


Así mismo, podemos mencionar que es una herramienta que remplaza a los ya conocidos como el TOAD, el PL/SQL Developer o el SQL Navigator (herramientas terceros) que también cumplen la misma funcionalidad de desarrollar o simplemente ejecutar consultas o scripts SQL, tanto DML como DDL. Además, se considera que podemos conectarnos a cualquier objeto de esquema de una base de datos Oracle mediante la autenticación de base de datos estándar de Oracle. Una vez conectado, podemos realizar operaciones sobre los objetos en la base de datos. 

SQL Developer, simplemente se considera que es la herramienta visual para el desarrollo de bases de datos que nos simplifica las siguientes tareas:

- Navegación y administración de los objetos de la base de datos.
- Ejecución de sentencias SQL y scripts.
- Edición y depuración de PL/SQL.
- La creación de reportes.

En cuanto a la apariencia y funcionalidad es similar a la de otras herramientas de este mismo tipo, lo interesante es que en las últimas versiones ha incorporado mejoras como la conexión con bases de datos no Oracle, como SQLServer, MySQL o Access. La conexión con MySQL o SQLServer se realiza a través de JDBC, y de manera bastante sencilla. Una vez establecida la conexión se pueden explorar los objetos de las bases de datos como si se tratara de una de base de datos Oracle, y ejecutar sobre ellas sentencias SQL, aunque en cuanto a funcionalidades más avanzadas como la creación de estructuras este tipo de conexión estará mucho más limitada.