JAVA WEB - ORACLE - SEMINARIO 03

JAVA WEB - ORACLE - SEMINARIO 03
INTRODUCCION
En este tercer seminario se desarrolla la capa de acceso a datos.
VIDEO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un vídeo de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



JAVA WEB - ORACLE - SEMINARIO 02

Práctica de Oracle SQL
INTRODUCCION
En este segundo seminario revisamos los conceptos de ORACLE DATABASE e implementamos la capa de datos.
VIDEO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un vídeo de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



JAVA WEB - ORACLE - SEMINARIO 01

Práctica de Oracle SQL
INTRODUCCION
En este primer seminario revisamos los conceptos fundamentales de una aplicación Java Web utilizando AJAX con JQuery y JSON.
VIDEO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



ORACLE SQL CONSULTAS A UNA TABLA

Práctica de Oracle SQL
INTRODUCCION
Contar con una guía de ejercicios es muy importante para practicar el lenguaje SQL en Oracle.
En este artículo tienes una serie de ejercicios que te permitirán desarrollar consultas a diferentes esquemas de una base de datos ORACLE.
00.- ESQUEMAS EJEMPLO
El script para crear los esquemas lo encuentras en el siguiente repositorio:
01.- CONSULTAS A UNA TABLA
Sintaxis
SELECT * | < lista_de_columnas y/o expresiones > 
FROM [ esquema . ] < nombre_de_tabla >;
Selección de Columnas
  1. Desarrolle una sentencia SELECT para consultar el id, nombre, apellido y email de todos los empleados. Esquemas SCOTT y HR.
  2. Desarrolle una sentencia SELECT para consultar el id, nombre, dirección y email de todos los alumnos. Esquema EDUCA.
  3. Desarrolle una sentencia SELECT para consultar el id, nombre, precio y profesor de cada curso. Esquema EDUCA.
  4. Desarrolle una sentencia SELECT para consultar el id y nombre de todos los departamentos. Esquemas SCOTT y HR.
  5. Desarrolle una sentencia SELECT para consultar el nombre, vacantes y precio de cada curso. Esquema EDUCA.
Campos Calculados
  1. Desarrollar una sentencia SELECT que permita obtener la cantidad y porcentaje de matriculados por cada curso. Esquema EDUCA.
  2. Desarrollar una sentencia SELECT para consultar el nombre y apellido de un empleado en una sola columna. Base de datos HR.
  3. Desarrollar una sentencia SELECT que permita obtener el importe que se obtendría si se logra vender todas las vacantes por cada curso. Base de datos EDUCA.
  4. Desarrolle una sentencia SELECT que permita obtener el importe que se obtendría por cada producto si se venden todas las unidades que hay en stock. Esquema VENTAS.
  5. Desarrollar una sentencia SELECT que permita consultar el salario, y el salario proyectado con un aumento del 15% de cada empleado. Esquema HR.
02.- FILTRO DE FILAS
Sintaxis
WHERE < condición_de_filtro >
Operadores de Comparación
  1. Desarrollar una sentencia SELECT para consultar los empleados del departamento de contabilidad. Esquemas SCOTT y HR.
  2. Desarrolle una sentencia SELECT para consultar los cursos que no tienen alumnos matriculados. Esquema EDUCA.
  3. Desarrollar una sentencia SELECT para consultar los productos que su precio en mayor a 50 Soles. Esquema VENTAS.
  4. Desarrollar una sentencia SELECT para consultar los empleados que su salario en mayor a 3000.00. Esquema HR.
  5. Desarrollar una sentencia SELECT para consultar las cuentas en SOLES. Esquema EUREKA.
Operadores Lógicos
  1. Consultar los empleados que ingresaron a trabajar el primer trimestre del año 1981. Esquema SCOTT y HR
  2. Desarrollar una sentencia SELECT para consultar los empleados que su salario esta entre 3500.00 y 10000.00. Esquema HR.
  3. Desarrollar una sentencia SELECT para consultar los empleados de contabilidad cuyo sueldo e mayor a 10,000.00. Esquema HR.
  4. Desarrollar una sentencia SELECT para obtener un listado de los empleados que su nombre tiene en la segunda posición la letra "A" o la letra "O". Esquemas SCOTT y HR.
  5. Desarrollar una sentencia SELECT para obtener un listado de los productos de la categoría "LINEA BLANCA" y que su precio sea mayor a 1000.00. Esquema VENTAS.
  6. Desarrollar una sentencia SELECT para obtener un listado de los empleados de los departamentos de VENTAS y recursos humanos. Esquemas SCOTT y HR.
  7. Consultar los empleado que la segunda letra de su nombre puede ser A, O u I. Esquemas SCOTT y HR.
Operadores LIKE, BETWEEN, IN, IS NULL
  1. Desarrollar una sentencia SELECT que permita consultar los empleados cuya penúltima letra de su nombre es E. Esquema SCOTT y HR.
  2. Desarrollar una sentencia SELECT que permita consultar los empleados que su nombre finaliza con la letra "O". Esquema HR.
  3. Desarrollar una sentencia SELECT que permita consultar los empleados que su apellido tiene en la segunda posición la letra "A" o la letra "O". Esquemas SCOTT y HR.
  4. Desarrollar una sentencia SELECT que permita averiguar que empleados tienen un sueldo mayor de 3,000.0 y menor de 10,000.0. Esquemas SCOTT y HR.
  5. Desarrollar una sentencia SELECT que permita averiguar quiénes son los empleados de los departamentos de contabilidad, recursos humanos y ventas. Esquemas SCOTT y HR.
  6. 28. Consultar los empleados del departamento de ventas que no tienen comisión. Esquemas SCOTT y HR.
03.- ORDENAMIENTO DEL CONJUNTO DE RESULTADOS
Sintaxis
ORDER BY < columna1 > [ ASC | DESC ] [, < columna2 > [ ASC | DESC ] [, . . . ] ]
Ejercicios
  1. Desarrollar una sentencia SELECT que permita mostrar una lista de los empleados ordenada por fecha de ingreso. Esquema HR.
  2. Desarrollar una sentencia SELECT para consultar los productos ordenados por categoría y precio. Esquema VENTAS.
04.- MANIPULACIÓN DE VALORES NULOS
Ejercicios
  1. Desarrollar una sentencia SELECT que permita averiguar los cursos que aún no tienen profesor. Esquema EDUCA.
  2. Desarrollar una sentencia SELECT para consultar el ingreso total de cada empleado. Esquema HR.
  3. Desarrollar una sentencia SELECT para consultar los empleados cuyos ingresos totales es menor a 8,000.00. Esquema HR.
  4. Consultar los empleados cuyo ingreso (salario + comisión) supera los 3500.00. Esquema SCOTT y HR.
05.- FUNCIONES DE FECHA Y HORA
Ejercicios
  1. Desarrollar una sentencia SELECT para consultar los empleados que ingresaron a la empresa un mes de Enero. Esquemas SCOTT y HR.
  2. Desarrollar una sentencia SELECT para consultar las matriculas del último mes. Esquema EDUCA.
  3. 36. Consultar los empleados que ingresaron a trabajar el primer trimestre del año 1981. Esquema SCOTT y HR
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



TALLER DE JAVA WEB

TALLER DE JAVA WEB
INTRODUCCION
En este articulo comparto los vídeos de un taller de JAVA WEB realizado en JULIO-2018 en UNI-FIIS.
VIDEO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



TALLER PLSQL

TALLER DE PL/SQL
INTRODUCCION
En este articulo comparto los vídeos de un taller de PL/SQL realizado en JULIO-2018 en SistemasUNI.
VIDEO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



GESTIÓN DE DATOS CON VISTAS

GESTIÓN DE DATOS CON VISTAS
INTRODUCCION
En este artículo explico cómo utilizar las vistas para uniformizar los datos en la construcción de consultas y reportes.
VIDEO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



ESQUEMAS EN ORACLE

ESQUEMAS EN ORACLE
INTRODUCCION
En este artículo explico de una manera practica como crear un esquema en una base de datos ORACLE.
PARTE 1
PARTE 2
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



LIBRO: ORACLE SQL

ORACLE 10G SQL
INTRODUCCIÓN
En esta ocasión comparto el libro ORACLE SQL en formato PDF, en este libro esta desarrollado el lenguaje SQL con base de datos ORACLE.
ORACLE SQL
CÓDIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



CEPS UNI 2018

CEPS-UNI: ANIVERSARIO NRO. 30
INTRODUCCIÓN
En esta ocasión comparto mi presentación en el aniversario del CEPS-UNI 2018.
PRESENTACION
VIDEO
CÓDIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



ORACLE - ORA-02264

ORA-02264: "name already used by an existing constraint"
FUNDAMENTOS
El nombre de la restricción en el esquema que estas trabajando debe ser único.
CAUSA
Este tipo de error se da cuando el nombre de una restricción ya existe, y estas intentando volver a utilizarlo en otra tabla.
SOLUCION
Para solucionar este tipo de error, debes utilizar otro nombre para tu restricción.
QUE TABLA UTILIZA LA RESTRICCION
Puedes averiguar que tabla esta utilizando la restricción con la siguiente consulta:
SELECT TABLE_NAME
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'NOMBRE DE LA RESTRICCION';
EJEMPLO ILUSTRATIVO
A continuación tienes un ejemplo:
SQL> CREATE TABLE PRODUCTO(
  2      CODIGO NUMBER(6) NOT NULL,
  3      NOMBRE VARCHAR2(100) NOT NULL,
  4      PRECIO NUMBER(10,2) NOT NULL,
  5      CONSTRAINT PK_PRODUCTO PRIMARY KEY (CODIGO),
  6      CONSTRAINT CHK_MAYOR_CERO CHECK( PRECIO > 0 )
  7  );
    CONSTRAINT CHK_MAYOR_CERO CHECK( PRECIO > 0 )
               *
ERROR at line 6:
ORA-02264: name already used by an existing constraint

SQL> SELECT TABLE_NAME
  2  FROM USER_CONSTRAINTS
  3  WHERE CONSTRAINT_NAME = 'CHK_MAYOR_CERO';

TABLE_NAME
----------------------------------------------
VENTA
Como puedes observar, la restricción CHK_MAYOR_CERO esta siendo utilizada en la tabla VENTA, y no puede ser utilizada en la tabla PRODUCTO, ni en ninguna otra tabla.
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



ORACLE - ORA-02449

ORA-02449: unique/primary keys in table referenced by foreign keys
FUNDAMENTOS
Cuando la clave primaria de una tabla A está siendo referenciada por una clave foránea de una tabla B, entonces no puedes eliminar la tabla A.
CASO
A continuación tienes un caso ilustrativo:
SQL> drop table empleado purge;
drop table empleado purge
           *
ERROR en lÝnea 1:
ORA-02449: unique/primary keys in table referenced by foreign keys
ENCONTRANDO LAS TABLAS RELACIONADAS
Cuando tienes muchas tablas en tu esquema, y no recuerdas cuales son esas tablas que te impiden eliminar una tabla, necesitas una consulta que te permita encontrar esas tablas que te generan el problema y analizar el caso.
A continuación tienes la consulta que te puede ayudar:
SELECT B.TABLE_NAME, B.CONSTRAINT_NAME, B.CONSTRAINT_TYPE, A.COLUMN_NAME
  FROM USER_CONS_COLUMNS A
  JOIN USER_CONSTRAINTS B
    ON B.R_OWNER = A.OWNER
   AND B.R_CONSTRAINT_NAME = A.CONSTRAINT_NAME
   AND B.CONSTRAINT_TYPE = 'R'
 WHERE A.TABLE_NAME = 'NOMBRE_TABLA';
Debes reemplazar NOMBRE_TABLA por el nombre de la tabla que quieres eliminar. De esta manera puedes identificar las tablas relacionadas que aún no has eliminado.
CASO - CONTINUACIÓN
A continuación tienes un caso ilustrativo:
SQL> SELECT B.TABLE_NAME, B.CONSTRAINT_NAME, B.CONSTRAINT_TYPE, A.COLUMN_NAME
  2    FROM USER_CONS_COLUMNS A
  3    JOIN USER_CONSTRAINTS B
  4      ON B.R_OWNER = A.OWNER
  5     AND B.R_CONSTRAINT_NAME = A.CONSTRAINT_NAME
  6     AND B.CONSTRAINT_TYPE = 'R'
  7   WHERE A.TABLE_NAME = 'EMPLEADO';

TABLE_NAME      CONSTRAINT_NAME                CONSTRAINT_TYPE    COLUMN_NAME
--------------- ------------------------------ ------------------ --------------------
ASIGNADO        FK_ASIGNADO_EMPLEADO           R                  CHR_EMPLCODIGO
CUENTA          FK_CUENTE_EMPLEADO             R                  CHR_EMPLCODIGO
MOVIMIENTO      FK_MOVIMIENTO_EMPLEADO         R                  CHR_EMPLCODIGO
En este caso, existen 3 tablas que tienes claves foráneas que estan haciendo referencia a la tabla EMPLEADO.
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



SPRING FRAMEWORK - EJECUTANDO PROCEDIMIENTOS ALMACENADOS

SPRING FRAMEWORK - EJECUTANDO PROCEDIMIENTOS ALMACENADOS
FUNDAMENTOS
Puedes usar cualquiera de los métodos query de JdbcTemplate o el método update para ejecutar el procedimiento almacenado, teniendo en cuenta si retorna o no un resultado.
Los procedimientos de SQL Server o MySQL pueden retornar directamente el resultado de una consulta utilizando la sentencia SELECT.
También dispones de la clase StoreProcedure donde dispones de opciones de mayor control para la ejecución de procedimientos almacenados.
SINTAXIS
El objetivo es ejecutar procedimientos almacenados que no tengan parametros de salida.
A continuación tienes la sintaxis que debes utilizar.
jdbcTemplate.update("call procedimiento (?, ?, ...)", parámetros);
PROCEDIMIENTO A EJECUTAR
El ejemplo que muestro a continuación es utilizando Oracle y el modelo es EUREKABANK, que lo encuentras en:
El procedimiento es para registrar una transacción que ejecuta un retiro de una cuenta.
create or replace procedure usp_egcc_retiro
(p_cuenta varchar2, p_importe number,p_empleado varchar2, p_clave varchar2)
as
  v_msg varchar2(1000);
  v_saldo number(12,2);
  v_moneda char(2);
  v_cont number(5,0);
  v_estado varchar2(15);
  v_costoMov number(12,2);
  v_clave varchar2(10);
begin
  -- Lee datos de la cuenta
  select 
    dec_cuensaldo, chr_monecodigo, int_cuencontmov, 
    vch_cuenestado, chr_cuenclave
    into v_saldo, v_moneda, v_cont, v_estado, v_clave
    from cuenta
    where chr_cuencodigo = p_cuenta 
    for update;
  -- Verifica los datos de la cuenta
  if v_estado != 'ACTIVO' then
    raise_application_error(-20001,'Cuenta no esta activa.');
  end if;
  if v_clave != p_clave then
    raise_application_error(-20001,'Datos incorrectos.');
  end if;
  -- Costo de operación
  select dec_costimporte
    into v_costoMov
    from costomovimiento
    where chr_monecodigo = v_moneda;
  -- Verifica el saldo
  v_saldo := v_saldo - p_importe - v_costoMov;
  if v_saldo < 0.0 then
    raise_application_error(-20001,'Saldo insuficiente.');
  end if;
  -- Actualiza la cuenta
  update cuenta
    set dec_cuensaldo = v_saldo,
    int_cuencontmov = int_cuencontmov + 2
    where chr_cuencodigo = p_cuenta;
  -- Registra el movimiento de retiro
  v_cont := v_cont + 1;
  insert into movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
    chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
    values(p_cuenta,v_cont,sysdate,p_empleado,'004',p_importe,null);
  -- Registra el costo de la operación
  v_cont := v_cont + 1;
  insert into movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
    chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
    values(p_cuenta,v_cont,sysdate,p_empleado,'010',v_costoMov,null);
  -- Confirmar la Tx
  commit;
exception
  when others then
    v_msg := sqlerrm; -- capturar mensaje de error
    rollback; -- cancelar transacción
    raise_application_error(-20001,v_msg);
end;
EJECUCIÓN DEL PROCEDIMIENTO
A continuación tienes el código Java para ejecutar el procedimiento usp_egcc_retiro:
public void procRetiro
(String cuenta, double importe,String codEmp, String clave) {

  jdbcTemplate.update("call usp_egcc_retiro (?, ?, ?, ?)", 
    cuenta, importe, codEmp, clave);

}
Debes tener en cuenta que la transacción es controlada en el procedimiento almacenado.
VIDEO DEMOSTRATIVO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



SPRING FRAMEWORK - JDBC TRANSACCIONES

SPRING FRAMEWORK - TRANSACCIONES
FUNDAMENTOS
Una transacción en un Sistema de Gestión de Bases de Datos (SGBD), es un conjunto de operaciones (instrucciones) que se ejecutan formando una unidad de trabajo, es decir, en forma indivisible o atómica.
CONFIGURACIÓN DEL CONTEXTO
A continuación tienes un ejemplo de la configuración del contexto.
<bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" 
            value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" 
            value="jdbc:oracle:thin:@localhost:1521:XE" />
  <property name="username" value="eureka" />
  <property name="password" value="admin" />
  </bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
<tx:annotation-driven transaction-manager="transactionManager" />
PROGRAMACIÓN
A continuación tienes el formato de como debes programar un método donde debes implementar una transacción.
@Transactional(
    propagation=Propagation.REQUIRED, 
    rollbackForClassName={"Exception"}
)
public void insertar( [ parámetros ] ) throws Exception {

  // Proceso

}
EJEMPLO ILUSTRATIVO
El ejemplo que muestro a continuación es utilizando Oracle y el modelo es EUREKABANK, que lo encuentras en:
@Transactional(
  rollbackFor = Exception.class, 
  propagation = Propagation.REQUIRES_NEW)
public void procDeposito(String cuenta, double importe, String codEmp) {
  // Variables
  String sql;
  Map map;
  double saldo;
  int cont;
  // Paso 1: Leer datos de la cuenta
  sql = "select dec_cuensaldo, int_cuencontmov  " 
      + "from cuenta where chr_cuencodigo = ? " 
      + "for update ";
  map = jdbcTemplate.queryForMap(sql, cuenta);
  saldo = Double.parseDouble(map.get("dec_cuensaldo").toString());
  cont = Integer.parseInt(map.get("int_cuencontmov").toString());
  // Paso 2: Actualizar cuenta
  saldo += importe;
  cont++;
  sql = "update cuenta set dec_cuensaldo = ?, " 
    + "int_cuencontmov = ? " 
    + "where chr_cuencodigo = ? ";
  jdbcTemplate.update(sql, saldo, cont, cuenta);
  // Paso 3: Registrar movimiento
  sql = "insert into movimiento(chr_cuencodigo,int_movinumero,"
      + "dtt_movifecha,chr_emplcodigo,chr_tipocodigo,dec_moviimporte) " 
      + "values(?,?,SYSDATE,?,'003',?)";
  jdbcTemplate.update(sql, cuenta, cont, codEmp, importe);
}

VIDEO DEMOSTRATIVO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.