martes, 11 de noviembre de 2014

Abrir un archivo desde Oracle Forms (Open file from oracle forms)

Para abrir un archivo desde Oracle forms y sin la necesidad de tener configurado el Webutil Oracle Forms nos ofrece la interacción con el paquete Dynamic Data Exchange (DDE).

Sobre el paquete de DDE:
El paquete DDE ofrece intercambio dinámico de datos (DDE) de apoyo dentro de las Formas
y Componentes del desarrollador.

Intercambio dinámico de datos (DDE) es un mecanismo por el cual las aplicaciones pueden
comunicarse e intercambiar datos de Windows. Soporte de cliente DDE se añade como un
extensión de procedimiento a las formas del desarrollador. El paquete PL/SQL para soporte DDE
proporciona a los desarrolladores de aplicaciones una interfaz de programación de aplicaciones (API) para el acceso a la funcionalidad DDE desde dentro de los procedimientos y disparadores PL/SQL.
Las funciones DDE permiten que las aplicaciones de Oracle comunicarse con otra DDE.

Las Aplicaciones de Windows (servidores) funcionan de tres maneras:

  • Importación de datos.
  • Exportación de datos.
  • Ejecución de comandos en el servidor DDE.

Este ejemplo muestra que en caso de que una boleta sea rechazada inmediatamente se muestra la lista de devoluciones, la lista tiene un
registro de incidencias que cuentan con un campo check, el cual el usuario va a marcar para que sea analizada*

Para que la forma se ejecute orrectamente es necesario:
-Crear un bloque llamado: BL_BROWSE
-Un grupo de botones de radio llamado: GR_SINO
-Crear una biblioteca con una alerta -> La biblioteca puede tener cualquier nombre pero con una unidad de programa que se llame
PAS1_MOSTRAR_AVISO que cuente con 2 parámetros ('Nombre_alerta','Mensaje_alerta');
-Localizar correctamente donde están los ejecutables (.exe) de los programas, por ejemplo:C:\Program Files\Microsoft Office\Office15\EXCEL.EXE
-La ruta del archivo que se desea abrir desde forms no tenga espacios en blanco, por ejemplo:C:\Listadedevoluciones.xls
-Listo

Además cuenta con un campo para llenar con un email al que queramos enviar el archivo, a la hora de imprimir el botón de enviar correo automáticamente abre el correo.


Código WHEN-RADIO-CHANGED:
DECLARE
AppID PLS_INTEGER;
lv_error varchar2(500);
  /*Ing. Roberto Díaz 11-11-2014 CR*/
BEGIN
IF :BL_BROWSE.GR_SINO=1 THEN
PAS1_MOSTRAR_AVISO('ALERT_MENSAJE','La boleta ha sido aprobada');
ELSE                                                           
PAS1_MOSTRAR_AVISO('ALERT_MENSAJE','La boleta ha sido rechazada');
AppID:=DDE.App_Begin('C:\Program Files\Microsoft Office\Office15\EXCEL.EXE'||' '||'C:\Listadedevoluciones.xls',DDE.APP_MODE_MAXIMIZED);
AppID:=DDE.App_Begin('C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe'||' '||'C:\webutil_conf.pdf',DDE.APP_MODE_MAXIMIZED);
END IF;
exception when others then 
lv_error:=(sqlerrm(sqlcode));
:bl_browse.it_mail:=lv_error;

END;

Código WHEN-BUTTON-PRESSED:
host('explorer.exe mailto:'||:bl_browse.it_mail);


La forma queda de la siguiente manera:



lunes, 29 de septiembre de 2014

Reloj Oracle Forms 10g

Es muy común ver la fecha en formas pero no tanto así la hora respectiva corriendo, este proceso es muy fácil de crear y solo se necesitan realizar 3 pasos:

1-When-Timer-Expired
2-When-New-Form-Instance
3-Pre-Form

*********************************************************************************
--Código When-New-Form-Instance
declare
TiempoActual TIMER;
   Xseg CONSTANT NUMBER := 1000;
begin

  TiempoActual:=CREATE_TIMER('TIEMPOACTUAL',Xseg,REPEAT);
 
  Select add_months(sysdate,-1) into :BL_FECHAS.FECHA_DESDE
  From dual;
 
  Select sysdate into :BL_FECHAS.FECHA_HASTA
  From dual;

select * into :BL_FECHAS.user
from global_name;

end;

*********************************************************************************
--Código When-Timer-Expired
declare
Timer_Expired varchar2(30);
   Lv_temporizador TIMER;
Temporizador VARCHAR2(40) := Get_Application_Property(TIMER_NAME);
   Lv_tiempo Varchar2(30) :=:SYSTEM.CURRENT_DATETIME;
   Lv_tiempo2 Varchar2(30);

begin
 
   SELECT ADD_MONTHS(SYSDATE,-1)INTO Lv_tiempo2
   FROM DUAL;
 
   IF Temporizador='TIEMPOACTUAL' THEN
     :BL_FECHAS.FECHA_HASTA:=Lv_tiempo;
     :BL_FECHAS.FECHA_DESDE:=Lv_tiempo2;
   END IF;
 
end;

*********************************************************************************
--Código Pre-Form
  set_application_property(PLSQL_DATE_FORMAT, 'DD/MM/YYYY HH24:MI:SS');
  set_application_property(BUILTIN_DATE_FORMAT, 'DD/MM/YYYY HH24:MI:SS');
  forms_ddl('ALTER SESSION SET NLS_DATE_FORMAT = ''DD/MM/YYYY HH24:MI:SS''');

*********************************************************************************
Notas: Los campos del bloque fecha no son de base de datos ni tipo Date, no se debe de permitir ni inserción ni actualización.

El Lienzo es muy sencillo y busca de manera gráfica mostrar de la forma más fácil el ejemplo mostrado.

El campo Fecha_Desde viene cargado con la fecha menos un mes, y la Fecha_Hasta que viene cargado con la hora actual.

Timer10g.fmb

lunes, 8 de septiembre de 2014

Cómo hacer un *.jar?

En Java para mejorar el manejo de clases lo mejor es empaquetarlas en un *.jar,

En el caso nuestro de Oracle, tenemos diferentes *.jar para el mejoramiento de nuestro aplicativo como los es el *.jar de webutil y otros.

Como ejemplo vamos a ver como hacer un *.jar para el manejo de iconos en etiquetas del formsweb.cfg, por ejemplo:
[webutil]
#WebUtilArchive=frmwebutil.jar,jacob.jar,FormsGraph.jar,Icons.jar
#archive=frmall.jar,frmicons.jar,FormsGraph.jar,iconsaba.jar,Icons.jar

Para hacer el *.jar digitamos lo siguiente en cmd


Esto nos creará un *.jar con un manifesto incluido.




miércoles, 23 de julio de 2014

Utilidad Wrap PL/SQL y función DBMS_DDL.WRAP

Los programadores como parte de seguridad de su código requieren de formas más seguras de protegerlas del mundo, para ello Oracle creó una utilidad para envolver ese código (wrap.exe).

Con esta utilidad podemos proteger código que no se desea que sea expuesto o sea libre, es como una manera de proteger los derechos de autor y propiedades intelectuales del programador.

La utilidad de envoltura toma un archivo de texto ASCII legible como entrada y la convierte a un archivo que contiene código de bytes. El resultado es que los DBA's, desarrolladores o cualquier persona con acceso a la base de datos no pueda ver el código fuente en cualquier formato legible.

Hay 2 maneras de envolver (wrappear*) código en la base de datos.

Mediante la función DBMS_DDL.WRAP y mediante el wrap.exe en el sistema del sistema.

1. DBMS_DDL.WRAP:
Ejecutamos el siguiente código, donde lo que va es el código deseado.
SELECT DBMS_DDL.WRAP ('CREATE OR REPLACE PACKAGE ORACLE_WRAP IS 
LV_VARIABLESGLOBALES VARCHAR2(1000);
PROCEDURE ORACLE_P_WARP (LV_VARIABLESLOCALES VARCHAR2) IS
BEGIN
        NULL;
END;')
FROM DUAL;

Resultado:
CREATE OR REPLACE PACKAGE ORACLE_WRAP wrapped 
a000000
369
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
92 b2
ANMT2o11sWW7fySkPmDKmPVq2jkwg1zwLZ5qfHSi2h7VIRsTBT232OfGw7TmqPp9tbVtI+ds
vkOvr5iCBpYBr4vbxXP1ZVb94X2zKJvmoQHZg9OyBhEwbLVZuy8VdvtH/dnC+KrdkqFIV1Uy
eeRLwQimocAmqer84qs1/NMPJPjyFBk=

*Para envolver o wrappear objetos debemos de poner desde el Create or Replace hasta el punto y coma final del código.

2- wrap.exe:
Pasos:
1. Lo primero es seleccionar el objeto de la base de datos que queremos envolver.

2. Click derecho sobre el objeto y le damos crear script

3. Creado el script lo guardamos en un directorio de preferencia y en la extensión le ponemos nombre_objeto.sql


4. Nos vamos al símbolo del sistema y ejecutamos el wrap.exe


5. Tal y como está en la imagen anterior ella nos crea un archivo nombre_objeto.plb que es el que nos da el código envuelto, este archivo lo encontramos en la misma carpeta donde está el wrap.exe, en mi caso es:
C:\DevSuiteHome_1\BIN.
El archivo en si me quedó con la ruta: C:\DevSuiteHome_1\BIN\COR_K_UTILITY.plb

6. Nos vamos al editor de la herramienta de administración de base de datos que tengamos, en mi caso TOAD, y jalamos el archivo con la extensión nombre_objeto.plb


7. Ejecutamos el código envuelto y listo, tenemos el código envuelto.


Otra forma es mediante Toad for Oracle



Y como resultado:

miércoles, 11 de junio de 2014

Que es BPM?

Modelado de Negocios: BPMN (Business Process Modeling Notation)

BPMN y sus componentes.

El funcionamiento de una empresa o negocio está centrado en los procesos de negocio, estos procesos agrupan una secuencia de actividades e información y representan como una empresa persigue sus objetivos, mediante la optimización y regulación de procesos de flujo de negocios creados por expertos de negocio para mejorar la productividad de la empresa.

BPM es un estándar para el modelado de procesos de negocio, incluye una notación para definir desde lo simple hasta lo más complejo. BPMN puede representar diferentes niveles de detalle y diferentes clases de diagramas para diferentes propósitos. BPMN proporciona las facilidades para traducir modelos a un forma ejecutable.

El BPM cuenta con 2 Áreas, 
  1. Área Administrativa: Aquí es donde mediante la exportación de un modelo BPM se configura el flujo de trabajo del área controlada y plantilla de la misma.
  2. Área de usuario: Esta área es la área de trabajo, donde mediante un Dashboard o tablero de control y dependiendo de los roles de usuario, un actor de sistema puede iniciar un proceso y/o atender ciertas tareas del flujo de trabajo configurado en el área administrativa.
El BPM me indica mediante asignaciones o reglas de negocio el estricto cumplimiento del desarrollo de flujos de trabajo.

Gracias a sistema BPM podemos respondernos En qué orden? Cuándo? Qué recursos necesita? Hacer qué? Que reacción produce? Quién lo hace? Que recursos produce? ciertos procesos de la empresa que permitan desarrollar de manera más eficaz, constante y segura procesos de negocio de la empresa.

Algunas  características de  BPM:

Nos proporciona un lenguaje gráfico muy entendible para el usuario.
Cuenta con integridad de funciones empresariales.
Utiliza SOA con el único objetivo de adaptarse de manera rápida a los cambios y nuevas oportunidades de negocio.
Combina software y experiencias de negocio para poder optimizar los procesos y facilitar una mejor innovación del negocio.
BPM esta dirigido a usuarios de negocio y a los ejecutores de proceso. Donde el usuario de negocios debe tener la capacidad para leer y entender fácilmente un proceso de negocio a través de los diagramas BPM. Los ejecutores de procesos deben ser capaces de representar el proceso en una implementación física.

Ahora bien, BPM se realiza mediante diagramas muy simples con un conjunto de elementos gráficos. Las 4 categorías básicas que podemos mencionar son:
  1. Eventos
  2. Tareas
  3. Compuertas
  4. Flujos
Estas 4 categorías se subdividen en varios tipos que poseen diferentes características en el modelo.

89% de los CEO's (Gerentes Generales, Jefes Ejecutivos)  creen que en los próximos años se requieren nuevas innovaciones.

Lo que logra BPM es buscar la eficiencia operativa:
  1. Identificar y eliminar procesos que no logran llenar las expectativas o que no agregan valor.
  2. Mejorar la productividad del equipo.
  3. Identificar cuellos de botella.
  4. Facilitar la supervisión de los equipos de trabajo.
  5. Estandarizar procesos.
BPM es una metodología para modelar, emsamblar y ejecutar además de monitorear y administrar procesos de manera más eficiente.

Para lograr el mejor desempeño de BPM es necesario entender el negocio, y lo principal crear el mejor modelado posible para un flujo de trabajo determinado.

Pasos para mejorar el modelado de proceso mediante expertos de negocios:
  1. Entender como funciona el negocio. -Simulación de Procesos-
  2. Identificar cambios de alto impacto en procesos. -Ejecución de Procesos-
  3. Ver como se maneja el ambiente de trabajo en equipo.
  4. Manejo de estadísticas y notificaciones. -Monitoreo del Negocio-
  5. Lograr la mejor viabilidad en tiempo real de los procesos.
Usos de BPM:
  1. Desarrollo de Productos.
  2. Marketing y Distribución.
  3. Suscripciones o afiliaciones.
  4. Administración de Pólizas.
  5. Manejo de quejas.
  6. Finanzas y Contabilidad.
  7. Solicitud de Incidencias.
  8. Registros de Garantías.
  9. Proceso de Compra y Venta.
  10. Diferentes tipos de gestiones.
Primer proyecto en BPM:
Para iniciar un proceso en BPM lo más recomendado es primero moldear un proceso con el experto de negocios del área o departamento de la empresa para lograr optimizar y sacar las mayores ventajas que esta metodología nos proporciona, entonces debemos de escoger un proceso que:

  1. Dependa de la productividad y colaboración de un equipo de trabajo.
  2. Que incluya notificaciones, monitoreo y supervisión de tareas.
  3. Que integre información clave de procesos.
BPM y SOA:
La agilidad del negocio puede mejorar en sistemas SOA, SOA produce agilidad de sistemas y procesos que necesitan un entorno flexible de servicios que sean dinámicos y óptimos.
SOA se refiere a Arquitectura Orientada a Servicios.

Ventajas de BPM:
Análisis sobre BPM indican que con esta metodología se mejora la rentabilidad y operatividad de la empresa, como:
  1. Incrementa la productividad.
  2. Elimina taras o actividad repetitivas o sin valor.
  3. Reduce o elimina errores.
  4. Reducción de costos a TI por mantenimiento de aplicaciones.
Según IBM, BPM logra brindar 3 veces más eficiencia operativa que un proyecto de reingeniería  tradicional.
80% de las empresas han logrado retornos de inversión.
75% de las empresas están usando, implementando o evaluando BPM.
80% de las empresas creen que su empresa tiene ventajas corporativas usando BPM.

En resumen BPM:
  1. Planifica
  2. Hace
  3. Actúa
  4. Verifica
Actualmente Grupo Divisoft de Costa Rica cuenta con un sistema BPM en Java y Oracle.

http://www.grupodivisoft.com/indexes.php



lunes, 2 de junio de 2014

TutoForms Oracle 10g (FMB's de ejemplo)

Gracias a estas formas que nos sirven como tutorial podemos aplicar funcionalidades importantes a nuestro proyecto en Oracle Forms, dentro del .zip viene la configuración necesaria para su funcionamiento.
C:\DevSuiteHome_1->forms->tutoforms

https://drive.google.com/file/d/0B43YIGj_nCoAaXM4UDZXYTQxMzA/edit?usp=sharing


lunes, 31 de marzo de 2014

Buscar texto en columnas de tablas Oracle PL/SQL

--Mediante Variable
--DROP PROCEDURE BUSCADOR;
CREATE OR REPLACE PROCEDURE BUSCADOR  IS
LV_QUERY VARCHAR2(1000);
TEXTO VARCHAR(200);
ENCONTRADOS NUMBER;

CURSOR BUSCATXT IS SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE
FROM ALL_TAB_COLUMNS 
WHERE OWNER='USUARIO' 
AND DATA_TYPE IN ('CHAR','VARCHAR2');

BEGIN
TEXTO:='TEXTO_A_BUSCAR';

FOR K IN BUSCATXT LOOP
LV_QUERY := 'SELECT COUNT(*) FROM'||K.OWNER||'.'||K.TABLE_NAME||' WHERE '||K.COLUMN_NAME||' LIKE ''%'||TEXTO||'%''';

EXECUTE IMMEDIATE LV_QUERY INTO ENCONTRADOS;

IF ENCONTRADOS>0 THEN
DBMS_OUTPUT.PUT_LINE(LV_QUERY);
END IF;
END LOOP;

END BUSCADOR;

--Mediante Parámetro
--DROP PROCEDURE BUSCADOR2;
CREATE OR REPLACE PROCEDURE BUSCADOR2 (LV_TXT VARCHAR2) IS
LV_QUERY VARCHAR2(1000);
ENCONTRADOS NUMBER;

CURSOR BUSCATXT IS SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE 
FROM ALL_TAB_COLUMNS 
WHERE OWNER='USUARIO2' 
AND DATA_TYPE IN ('CHAR','VARCHAR2');

BEGIN
--TEXTO:='TEXTO_A_BUSCAR';
FOR K IN BUSCATXT LOOP
LV_QUERY := 'SELECT COUNT(*) FROM '||K.OWNER||'.'||K.TABLE_NAME||' WHERE '||K.COLUMN_NAME||' LIKE ''%'||LV_TXT||'%''';

EXECUTE IMMEDIATE LV_QUERY INTO ENCONTRADOS;

IF ENCONTRADOS>0 THEN
DBMS_OUTPUT.PUT_LINE(LV_QUERY);
END IF;
END LOOP;

END BUSCADOR2;

--Mediante Query
SELECT owner,name,TYPE,line,text
FROM All_Source
WHERE LOWER (text) LIKE LOWER('%TEXTO_A_BUSCAR%')
AND OWNER='ESQUEMA';

jueves, 13 de marzo de 2014

FUNCIONES INTEGRADAS PL/SQL

SYSDATE
Devuelve la fecha del sistema.

SELECT SYSDATE
FROM DUAL;
--RETORNA: 13/03/2014 20:12:01

TO_DATE
Convierte una expresión al tipo DATE.

SELECT TO_DATE ('01/12/2014', 'DD/MM/YYYY')
FROM DUAL;
--RETORNA: 01/12/2014

Ahora con hora:
SELECT TO_DATE ('20/10/2014 00:00:01', 'DD/MM/YYYY HH24:MI:SS')
FROM DUAL;
--RETORNA: 20/10/2014 0:00:01

TO_CHAR
Convierte una expresión al tipo CHAR.

SELECT TO_CHAR (SYSDATE, 'DD/MM/YYYY')
FROM DUAL;
--RETORNA: 13/03/2014

SELECT TO_CHAR (SYSDATE, 'DAY/MONTH/YEAR')
FROM DUAL;
--RETORNA: JUEVES   /MARZO     /TWENTY FOURTEEN

TO_NUMBER
Convierte una expresion alfanumérica en numerica.

SELECT TO_NUMBER ('08')
FROM DUAL;
--RETORNA: 8

NVL
Devuelve el valor recibido como parámetro en el caso de que expresión sea nula.

SELECT COD_FACTURA, NVL (MONTO, 0) "MONTO"
FROM FACTURAS;
----RETORNA:
--50,20000
--51,34560
--52,30000
--53,45000
--54,10000
--55,22000


DECODE
Decode proporciona la funcionalidad de una sentencia de control de flujo if-else if-else.
El último valor asignado se toma como "ELSE"

SELECT DECODE(NUMERO,
1, 'ENERO',
2, 'FEBRERO',
3, 'MARZO',
4, 'ABRIL',
5, 'MAYO',
6, 'JUNIO',
7, 'JULIO',
8, 'AGOSTO',
9, 'SEPTIEMBRE',
10, 'OCTUBRE',
11, 'NOVIEMBRE',
12, 'DICIEMBRE',
'Mes no existe') MES
FROM MES
WHERE NUMERO=№
--RETORNA: SI ES 10= OCTUBRE

TRUNC
Solo borra fechas o numeros, no borra texto.

Si es una fecha  elimina las horas, minutos y segundos.
SELECT TRUNC(SYSDATE)
FROM DUAL;
--RETORNA: 13/03/2014

Si es una cantidad solo devuelve el entero.
SELECT TRUNC (201091.08)
FROM DUAL;
--RETORNA:201091

LENGTH
Devuelve la longitud de un tipo CHAR.

SELECT LENGTH ('VIVA SAPRISSA')
FROM DUAL;
--RETORNA: 13

INSTR
Busca una string de caracteres dentro de otra. Devuelve la posicion deL string buscado.

SELECT INSTR ('YO VIVO EN COSTA RICA',
              'RICA',
              1,
              1)
FROM DUAL;
--RETORNA: 18

REPLACE
Reemplaza un texto por otro texto.

SELECT REPLACE ('VIVA SAPRISSA', 'VIVA', 'VAMOS')
FROM DUAL;
--RETORNA: VAMOS SAPRISSA

SUBSTR
Obtiene una parte de una expresion, desde una posición específica y con una longitud determinada.

SELECT SUBSTR ('VIVA SAPRISSA', 5, 4)                          
FROM DUAL;
--RETORNA: SAP

UPPER
Convierte una expresion alfanumerica a mayúsculas.

SELECT UPPER ('viva saprissa')
FROM DUAL;
--RETORNA: VIVA SAPRISSA

LOWER
Convierte una expresion alfanumerica a minúsculas.

SELECT LOWER ('VIVA SAPRISSA')
FROM DUAL;
--RETORNA: viva saprissa


ROWIDTOCHAR
Convierte un ROWID a tipo caracter.

SELECT ROWIDTOCHAR(ROWID)
FROM DUAL;
--RETORNA: AAAAB0AABAAAAOhAAA

RPAD
Añade N veces una determinada cadena de caracteres a la derecha una expresión.

SELECT RPAD ('Costa Rica ',50, '*')
FROM DUAL;
--RETORNA: Costa Rica ***************************************

LPAD
Añade N veces una determinada cadena de caracteres a la izquierda de una expresión.

SELECT LPAD ('Costa Rica ', 50, '*')
FROM DUAL;
--RETORNA: ***************************************Costa Rica

RTRIM
Elimina los espacios en blanco a la derecha de una cadena.

SELECT RTRIM ('SANTIAGO DIAZ JIMENEZ    ')
FROM DUAL;
--RETORNA: SANTIAGO DIAZ JIMENEZ

LTRIM
Elimina los espacios en blanco a la izquierda de una cadena.

SELECT LTRIM ('       SANTIAGO DIAZ JIMENEZ')
FROM DUAL;
--RETORNA:SANTIAGO DIAZ JIMENEZ

TRIM
Elimina los espacios en blanco a la izquierda y derecha de una expresion

SELECT TRIM ('       SANTIAGO DIAZ JIMENEZ        ')
FROM DUAL;
--RETORNA: SANTIAGO DIAZ JIMENEZ

miércoles, 12 de marzo de 2014

CASE vs DECODE

--Tabla prueba
DROP TABLE USUARIO1.MES CASCADE CONSTRAINTS;

CREATE TABLE USUARIO1.MES(
NUMERO  NUMBER
);

--Data de la tabla prueba
SET DEFINE OFF;

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (1);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (2);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (3);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (4);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (5);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (6);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (7);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (8);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (9);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (10);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (11);

INSERT INTO USUARIO1.MES (NUMERO)
     VALUES (12);
COMMIT;


--Maneras de hacer un CASE
SELECT
CASE
WHEN NUMERO = '1' THEN 'Enero'
WHEN NUMERO = '2' THEN 'Febrero'
WHEN NUMERO = '3' THEN 'Marzo'
WHEN NUMERO = '4' THEN 'Abril'
WHEN NUMERO = '5' THEN 'Mayo'
WHEN NUMERO = '6' THEN 'Junio'
WHEN NUMERO = '7' THEN 'Julio'
WHEN NUMERO = '8' THEN 'Agosto'
WHEN NUMERO = '9' THEN 'Septiembre'
WHEN NUMERO = '10' THEN 'Octubre'
WHEN NUMERO = '11' THEN 'Noviembre'
WHEN NUMERO = '12' THEN 'Diciembre'
ELSE 'Numero para mes inválido'
END AS MES
FROM MES
WHERE NUMERO=№ ---SI QUEREMOS TRAER EL MES COMO PARÁMETRO


--Otra forma de hacer el CASE
SELECT
CASE NUMERO
WHEN  1 THEN 'Enero'
WHEN  2 THEN 'Febrero'
WHEN  3 THEN 'Marzo'
WHEN  4 THEN 'Abril'
WHEN  5 THEN 'Mayo'
WHEN  6 THEN 'Junio'
WHEN  7 THEN 'Julio'
WHEN  8 THEN 'Agosto'
WHEN  9 THEN 'Septiembre'
WHEN  10 THEN 'Octubre'
WHEN  11 THEN 'Noviembre'
WHEN  12 THEN 'Diciembre'
ELSE 'Numero para mes inválido'
END AS MES
FROM MES
WHERE NUMERO=№ ---SI QUEREMOS TRAER EL MES COMO PARÁMETRO

--Misma resultado pero con DECODE
SELECT DECODE(NUMERO,
1, 'ENERO',
2, 'FEBRERO',
3, 'MARZO',
4, 'ABRIL',
5, 'MAYO',
6, 'JUNIO',
7, 'JULIO',
8, 'AGOSTO',
9, 'SEPTIEMBRE',
10, 'OCTUBRE',
11, 'NOVIEMBRE',
12, 'DICIEMBRE',
'Mes no existe') MES
FROM MES
WHERE NUMERO=№ ---SI QUEREMOS TRAER EL MES COMO PARÁMETRO

Nota:
1- LOS CASE no llevan coma después de la asignación del THEN 'VALOR_ASIGNADO'.

2- Si el tipo campo es number no es necesario la comilla simple (' '), si
el campo es varchar es necesario aplicar la comilla simple.

3- En el DECODE después del DECODE(CAMPO_TABLA...debemos de digitar el campo de la tabla
donde están los valores a los que se les va a hacer el if- else if -else del DECODE.

4- El ELSE no es obligatorio ponerlo en el CASE.

5- Sintaxis del CASE
Select CAMPO_TABLA2, CAMPO_TABLA3, etc
CASE CAMPO_TABLA1
WHEN CONDICION -> VALOR -> THEN -> 'VALOR_ASIGNADO'
WHEN CONDICION -> VALOR -> THEN -> 'VALOR_ASIGNADO'
WHEN CONDICION -> VALOR -> THEN -> 'VALOR_ASIGNADO'
--ASÍ SUCECIVAMENTE
ELSE -> 'VALOR_ASIGNADO'
END -> ALIAS_COLUMNA
FROM TABLA
--SI SE DESEA SE FILTRA
WHERE ->CONDICIÓN --SE PUEDE ASIGNAR EL "&" PARA FILTRAR SOLO UNO POR PANTALLA


6-Sintaxis del DECODE
Select CAMPO_TABLA1, CAMPO_TABLA2, etc, DECODE(CAMPO_tABLA,
VALOR,'VALOR_ASIGNADO'
VALOR,'VALOR_ASIGNADO'
VALOR,'VALOR_ASIGNADO'
--ASÍ SUCESIVAMENTE
'VALOR_ASIGNADO' --ACTÚA COMO ELSE
FROM TABLA
--SI SE DESEA SE FILTRA
WHERE ->CONDICIÓN --SE PUEDE ASIGNAR EL "&" PARA FILTRAR SOLO UNO POR PANTALLA

FUNCIONES ORACLE GREATEST Y LEAST

GREATEST

En Oracle PL/SQL la función GREATEST devuelve el mayor valor de una lista de expresiones.

SINTAXIS

GREATEST (expr1, expr2, ... expr_n)
PARÁMETROS O ARGUMENTOS

expr1 , expr2 ,. expr_n son expresiones que son evaluadas por la función MAYOR .

Teoría:

Si los tipos de datos de las expresiones son diferentes, todas las expresiones se convierten en lo que sea el tipo de datos expr1 es.
Si la comparación se basa en una comparación carácter, un carácter se considera mayor que otra si tiene un valor de conjunto de caracteres superior.

SELECT GREATEST(2, 5, 12, 3) FROM DUAL; --RETORNA 12  
SELECT GREATEST ('2', '5', '12', '3') FROM DUAL;   -- RETORNA 5
SELECT GREATEST('apples', 'oranges', 'bananas') FROM DUAL; -- RETORNA ORANGES  
SELECT GREATEST('apples', 'applis', 'applas')    FROM DUAL;  --RETORNA APPLIS

LEAST

En Oracle PL/SQL la función LEAST devuelve el valor menor de una lista de expresiones.

SINTAXIS


LEAST (expr1, expr2, ... expr_n)
PARÁMETROS O ARGUMENTOS

expr1 , expr2 ,. expr_n son expresiones que son evaluadas por la función MENOS .

Teoría:

Si los tipos de datos de las expresiones son diferentes, todas las expresiones se convierten en lo que sea el tipo de datos expr1 es.
Si la comparación se basa en una comparación carácter, un carácter se considera menor que otro si tiene un valor conjunto de caracteres inferior.
Tener un valor NULL en una de las expresiones devolverá NULL como el mínimo valor.


SELECT LEAST(2, 5, 12, 3) FROM DUAL;    --RETORNA 2
SELECT LEAST ('2', '5', '12', '3') FROM DUAL;    --RETORNA 12
SELECT LEAST('apples', 'oranges', 'bananas') FROM DUAL;    --RETORNA APPLES
SELECT LEAST('apples', 'applis', 'applas')    FROM DUAL;  --RETORNA APPLAS

jueves, 6 de marzo de 2014

Tablas para ejemplos Oracle

Por aquí me encontré varias tablas que sirven para practicar por aquello que tengan los usuarios Scott y HR bloqueados o quieran practicar con diferentes esquemas y tablas.

CREATE TABLE TEAMS(
TeamNo1_ID NUMBER(3) NOT NULL,
TName VARCHAR(50),
Address VARCHAR(50),
NoOfWins NUMBER(3),
CONSTRAINT PK_Team_ID PRIMARY KEY (TeamNo1_ID));
DESC TEAMS;

CREATE TABLE PLAYERPOSITION(
PlayerPosition_ID NUMBER(3),
PositionName CHAR(20),
CONSTRAINT PK_PPosition_ID PRIMARY KEY (PlayerPosition_ID));
DESC POSITION;

CREATE TABLE PLAYERS(
PlayerNo1_ID NUMBER(3) NOT NULL,
Team_ID NUMBER(3) NOT NULL,
PPosition_ID NUMBER(3) NOT NULL,
FName CHAR(50),
LName CHAR(50),
Address VARCHAR (50),
Postcode VARCHAR (50),
City VARCHAR(50),
Country VARCHAR(50),
Height VARCHAR(20),
Weight VARCHAR(20),
DOB DATE,
Education VARCHAR(50),
Debut VARCHAR(50),
Experience VARCHAR(50),
InterM VARCHAR(20),
NatM VARCHAR(20),
CONSTRAINT PK_PPlayer_ID PRIMARY KEY (PlayerNo1_ID));
DESC PLAYERS;

CREATE TABLE WINNERSTEAM(
WinnersTeam_ID NUMBER(3),
TeamNo2_ID NUMBER(3),
CONSTRAINT PK_WinnersTeam_ID PRIMARY KEY (WinnersTeam_ID));
DESC WINNERSTEAM;

CREATE TABLE MATCHES(
Match_ID NUMBER(3) NOT NULL,
WinnersTeam_ID NUMBER(3),
Season VARCHAR(20),
HomeTeamScore NUMBER(3),
AwayTeamScore NUMBER(3),
NoOfFouls NUMBER(3),
MDate VARCHAR(20),
MType VARCHAR(100),
MLocation VARCHAR(100),
CONSTRAINT PK_Match_ID PRIMARY KEY (Match_ID));
DESC MATCHES;

CREATE TABLE PERFORMANCES(
PPlayer_ID NUMBER(3) NOT NULL,
Match_ID NUMBER(3) NOT NULL,
TwoPointAttempts VARCHAR(50),
TwoPointFieldGoalsMade VARCHAR(50),
ThreePointAttempts VARCHAR(50),
ThreePointFieldGoalsMade VARCHAR(50),
FreeThrowAttempts VARCHAR(50),
FreeThrowsMade VARCHAR(50),
Rebounds VARCHAR(50));
DESC PERFORMANCES;


CREATE TABLE POTM(
Potm_ID NUMBER(3) NOT NULL,
Player_ID NUMBER(3) NOT NULL,
FirstName VARCHAR(20),
LastName VARCHAR(20),
CONSTRAINT PK_Potm_ID PRIMARY KEY (Potm_ID));
DESC POTM;

CREATE TABLE CLUBS(
Club_ID NUMBER(3) NOT NULL,
ClubAddr_ID NUMBER(3) NOT NULL,
CName VARCHAR(50),
Address VARCHAR(50),
Postcode VARCHAR(50),
City VARCHAR(50),
Country VARCHAR(50),
CONSTRAINT PK_Club_ID PRIMARY KEY (Club_ID));
DESC CLUPS;

CREATE TABLE MANAGERS(
Man_ID NUMBER(3) NOT NULL,
Coa_ID NUMBER(3) NOT NULL,
CO_ID NUMBER(3) NOT NULL,
FirstName VARCHAR(50),
LastName VARCHAR(50),
TName VARCHAR(50),
CONSTRAINT PK_Man_ID PRIMARY KEY (Man_ID));
DESC MANAGERS;

CREATE TABLE COACHES(
Coa_ID NUMBER(3) NOT NULL,
Man_ID NUMBER(3) NOT NULL,
CO_ID NUMBER(3) NOT NULL,
FirstName VARCHAR(50),
LastName VARCHAR(50),
TName VARCHAR(50),
CONSTRAINT PK_Coa_ID PRIMARY KEY (Coa_ID));
DESC COACHES;

CREATE TABLE CLUBOWNERS(
CO_ID NUMBER(3) NOT NULL,
Man_ID NUMBER(3) NOT NULL,
Coa_ID NUMBER(3) NOT NULL,
Club_ID NUMBER(3) NOT NULL,
FirstName VARCHAR(50),
LastName VARCHAR(50),
CName VARCHAR(50),
CONSTRAINT PK_CO_ID PRIMARY KEY (CO_ID));
DESC CLUPOWNERS;


ALTER TABLE PLAYERS ADD CONSTRAINT FK_PPosition_ID FOREIGN KEY (PPosition_ID) REFERENCES PLAYERPOSITION(PlayerPosition_ID);
ALTER TABLE PLAYERS ADD CONSTRAINT FK_Team_ID FOREIGN KEY (Team_ID) REFERENCES TEAMS(TeamNo1_ID);
ALTER TABLE WINNERSTEAM ADD CONSTRAINT FK_TeamNo2_ID FOREIGN KEY (TeamNo2_ID) REFERENCES TEAMS(TeamNo1_ID);
ALTER TABLE MATCHES ADD CONSTRAINT FK_WinnersTeam_ID FOREIGN KEY (WinnersTeam_ID) REFERENCES WINNERSTEAM(WinnersTeam_ID);
ALTER TABLE PERFORMANCES ADD CONSTRAINT FK_Match_ID FOREIGN KEY (Match_ID) REFERENCES MATCHES(Match_ID);
ALTER TABLE PERFORMANCES ADD CONSTRAINT FK_PPlayer_ID FOREIGN KEY (PPlayer_ID) REFERENCES PLAYERS(PlayerNo1_ID);


INSERT INTO PLAYERS VALUES (001, 400, 150, 'Chris','Bosh','1146 Buck Drive','UT 84118','Kearns','USA','211cm','107kg', TO_DATE('1984-03-24','yyyy-mm-dd'),'Georgia Institute of Technology','2003','9','5','10');
INSERT INTO PLAYERS VALUES (002, 400, 151, 'Dwayne','Wade','3498 Mandan Road','MO 65201','Columbia','USA','193cm','100kg', TO_DATE('1982-01-17','yyyy-mm-dd'),'Marquette University','2003','9','13','15');
INSERT INTO PLAYERS VALUES (003, 400, 155, 'Juwan','Howard','444 Wayside Lane','CA 94547','Hercules','USA','206cm','118kg', TO_DATE('1973-02-07','yyyy-mm-dd'),'University of Michigan','1994','18','16','4');
INSERT INTO PLAYERS VALUES (004, 400, 152, 'Lebron','James','1101 Elkview Drive','FL 33131','Miami','USA','203cm','113kg', TO_DATE('1984-12-30','yyyy-mm-dd'),'St. Vincent-St. Mary HS (OH)','2003','9','18','8');
INSERT INTO PLAYERS VALUES (005, 400, 153, 'Rashard','Lewis','4317 Chandler Hollow Road','PA 15222','Pittsburgh','USA','208cm','104kg', TO_DATE('1979-08-08','yyyy-mm-dd'),'Alief Elsik HS (TX)','1998','14','20','17');
INSERT INTO PLAYERS VALUES (006, 400, 154, 'Chris','Andersen','4555 Prospect Valley Road','CA 90210','Beverly Hills','USA','208cm','104kg', TO_DATE('1978-07-07','yyyy-mm-dd'),'Blinn Junior College','2001','10','19','11');
INSERT INTO PLAYERS VALUES (007, 400, 150, 'Mike','Miller','2846 Capitol Avenue','IN 46204','Indianapolis','USA','203cm','99kg', TO_DATE('1980-02-19','yyyy-mm-dd'),'University of Florida','2000','12','13','22');
INSERT INTO PLAYERS VALUES (008, 400, 153, 'Mario','Chalmers','778 Poplar Street','IL 60090','Wheeling','USA','188cm','86kg', TO_DATE('1986-05-19','yyyy-mm-dd'),'University of Kansas','2008','4','16','24');
INSERT INTO PLAYERS VALUES (009, 400, 154, 'James','Jones','1844 Young Road','ID 83651','Nampa','USA','203cm','100kg', TO_DATE('1980-10-04','yyyy-mm-dd'),'University of Miami','2003','9','23','27');
INSERT INTO PLAYERS VALUES (010, 400, 151, 'Jarvis','Varnado','1502 Bolman Court','IL 62401','Effingham','USA','206cm','104kg', TO_DATE('1988/03/01','yyyy-mm-dd'),'University of Michigan','2010','1','26','28');
INSERT INTO PLAYERS VALUES (011, 400, 150, 'Norris','Cole','3793 Buckhannan Avenue','NY 13206','Syracuse','USA','188cm','79kg', TO_DATE('1988/10/30','yyyy-mm-dd'),'Cleveland State University','2001','11','17','19');
INSERT INTO PLAYERS VALUES (012, 400, 154, 'Shane','Battier','1819 Catherine Drive','ND 58601','Dickinson','USA','203cm','102kg', TO_DATE('1978/09/09','yyyy-mm-dd'),'Duke University','2001','11','26','30');
INSERT INTO PLAYERS VALUES (013, 400, 155, 'Ray','Allen','2895 Saint Marys Avenue','NY 13166','Weedsport','USA','196cm','93kg', TO_DATE('1925/07/20','yyyy-mm-dd'),'University of Connecticut','1996','16','29','34');
INSERT INTO PLAYERS VALUES (014, 400, 150, 'Udonis','Haslem','9, rue du Président Roosevelt','77176','SAVIGNY-LE-TEMPLE','FRANCE','203cm','107kg', TO_DATE('1980/06/09','yyyy-mm-dd'),'Florida','2003','9','28','35');
INSERT INTO PLAYERS VALUES (015, 400, 151, 'Joel','Anthony','Carretera del Muelle, 95','12232','Torrechiva','SPAIN','206cm','111kg', TO_DATE('1982/08/09','yyyy-mm-dd'),'UNLV','2007','5','39','45');
INSERT INTO PLAYERS VALUES (016, 500, 152, 'Andrew','Goudelock','Piazza San Carlo, 69','13030','Collobiano VC','ITALY','191cm','91kg', TO_DATE('1988/12/07','yyyy-mm-dd'),'College of Charleston','2011','1','16','48');
INSERT INTO PLAYERS VALUES (017, 500, 153, 'Darius','Morris','Piazza Trieste e Trento, 134','12030','Kearns','USA','193cm','86kg', TO_DATE('1991/01/03','yyyy-mm-dd'),'University of Michigan','2011','1','27','35');
INSERT INTO PLAYERS VALUES (018, 500, 154, 'Devin','Ebanks','48, rue Nationale','75007','Paris','FRANCE','206cm','98kg', TO_DATE('1989/10/28','yyyy-mm-dd'),'West Virginia University','2010','2','32','35');
INSERT INTO PLAYERS VALUES (019, 500, 155, 'Antawn','Jamison','97, rue des Lacs','14200','HÉROUVILLE-SAINT-CLAIR','FRANCE','206cm','107kg', TO_DATE('1976/06/12','yyyy-mm-dd'),'University of North Carolina','1998','14','29','50');
INSERT INTO PLAYERS VALUES (020, 500, 153, 'Steve','Blake','C/ Eras, 41','28723','Pedrezuela','SPAIN','191cm','78kg', TO_DATE('1980/02/26','yyyy-mm-dd'),'University of Maryland','1996','9','51','42');
INSERT INTO PLAYERS VALUES (021, 500, 151, 'Earl','Clark','Fuente del Gallo, 64','14860','Doña Mencía','SPAIN','208cm','102kg', TO_DATE('1988/01/17','yyyy-mm-dd'),'University of Louisville','2009','3','21','13');
INSERT INTO PLAYERS VALUES (022, 500, 150, 'Steve','Nash','37 Green Avenue','CA 94107','San Francisco','USA','191cm','86kg', TO_DATE('1974/02/07','yyyy-mm-dd'),'Santa Clara University','1996','16','33','44');
INSERT INTO PLAYERS VALUES (023, 500, 153, 'Dwight','Howard','2296 Heavner Avenue','GA 30245','Lawrenceville','USA','211cm','120kg', TO_DATE('1985/12/08','yyyy-mm-dd'),'SW Atlanta Christian Academy (GA)','2004','8','52','9');
INSERT INTO PLAYERS VALUES (024, 500, 153, 'Pau','Gasol','3648 Pine Street',' PA 15017','Bridgeville','USA','213cm','118kg', TO_DATE('1980/07/06','yyyy-mm-dd'),'Barcelona, Spain','2001','11','24','29');
INSERT INTO PLAYERS VALUES (025, 500, 155, 'Jodie','Meeks','4606 Doctors Drive','CA 90245','El Segundo','USA','193cm','94kg', TO_DATE('1987/08/21','yyyy-mm-dd'),'University of Kentucky','2009','3','48','59');
INSERT INTO PLAYERS VALUES (026, 500, 154, 'Chris','Duhon','558 Hedge Street','NJ 08876','Somerville','USA','185cm','86kg', TO_DATE('1982/08/31','yyyy-mm-dd'),'Duke University','2004','8','55','14');
INSERT INTO PLAYERS VALUES (027, 500, 152, 'Kobe','Bryant','4016 Pointe Lane,','FL 33478','Florida','USA','201cm','100kg', TO_DATE('1978/08/23','yyyy-mm-dd'),'Lower Merion HS (PA)','1996','16','13','28');
INSERT INTO PLAYERS VALUES (028, 500, 150, 'Jordan','Hill','355 North Street','VA 22903','California','USA','208cm','107kg', TO_DATE('1987/07/27','yyyy-mm-dd'),'University of Arizona','2009','3','36','44');
INSERT INTO PLAYERS VALUES (029, 500, 151, 'Robert','Sacre','2390 Peaceful Lane','OH 44109','Cleveland','USA','213cm','118kg', TO_DATE('1989/06/06','yyyy-mm-dd'),'Gonzaga University','2012','0','39','49');
INSERT INTO PLAYERS VALUES (030, 500, 155, 'Jackson','Sare','713 Lake Floyd Circle','MD 21740','Ohio','USA','210cm','114kg', TO_DATE('1980/05/04','yyyy-mm-dd'),'Bordeaux, France','2012','2','58','64');

INSERT INTO WINNERSTEAM VALUES (010, 400);
INSERT INTO WINNERSTEAM VALUES (020, 500);


INSERT INTO PERFORMANCES VALUES (001, 200, '1','3','3','1','3','1','2');
INSERT INTO PERFORMANCES VALUES (002, 200, '2','6','3','2','3','3','3');
INSERT INTO PERFORMANCES VALUES (003, 200, '4','8','3','1','4','2','4');
INSERT INTO PERFORMANCES VALUES (004, 200, '3','9','4','1','4','4','1');
INSERT INTO PERFORMANCES VALUES (005, 200, '4','4','4','2','5','2','5');
INSERT INTO PERFORMANCES VALUES (006, 200, '3','5','2','2','6','3','6');
INSERT INTO PERFORMANCES VALUES (007, 200, '2','3','5','1','3','1','3');
INSERT INTO PERFORMANCES VALUES (008, 200, '1','2','5','1','2','4','2');
INSERT INTO PERFORMANCES VALUES (009, 200, '3','5','5','1','2','2','4');
INSERT INTO PERFORMANCES VALUES (010, 200, '1','7','6','2','1','3','1');
INSERT INTO PERFORMANCES VALUES (011, 200, '1','9','6','1','1','4','6');
INSERT INTO PERFORMANCES VALUES (012, 200, '1','8','3','2','3','1','4');
INSERT INTO PERFORMANCES VALUES (013, 200, '1','1','4','1','4','1','2');
INSERT INTO PERFORMANCES VALUES (014, 200, '1','2','2','1','5','2','3');
INSERT INTO PERFORMANCES VALUES (015, 200, '1','4','6','1','6','3','6');
INSERT INTO PERFORMANCES VALUES (016, 300, '1','6','5','2','5','4','2');
INSERT INTO PERFORMANCES VALUES (017, 300, '2','7','7','2','4','5','3');
INSERT INTO PERFORMANCES VALUES (018, 300, '2','9','3','1','3','2','4');
INSERT INTO PERFORMANCES VALUES (019, 300, '1','4','2','1','2','4','5');
INSERT INTO PERFORMANCES VALUES (020, 300, '1','3','5','1','4','5','6');
INSERT INTO PERFORMANCES VALUES (021, 300, '1','1','6','2','5','3','1');
INSERT INTO PERFORMANCES VALUES (022, 300, '1','2','7','2','6','1','2');
INSERT INTO PERFORMANCES VALUES (023, 300, '1','4','3','1','3','5','6');
INSERT INTO PERFORMANCES VALUES (024, 300, '2','6','4','1','2','2','4');
INSERT INTO PERFORMANCES VALUES (025, 300, '4','7','6','1','5','3','4');
INSERT INTO PERFORMANCES VALUES (026, 300, '1','8','3','2','4','4','2');
INSERT INTO PERFORMANCES VALUES (027, 300, '6','4','2','1','1','5','5');
INSERT INTO PERFORMANCES VALUES (028, 300, '7','3','3','2','2','3','5');
INSERT INTO PERFORMANCES VALUES (029, 300, '3','1','4','1','3','2','1');
INSERT INTO PERFORMANCES VALUES (030, 300, '4','9','5','1','6','1','6');

INSERT INTO MATCHES VALUES (200, 010, 'SUMMER','125','160','5','05/12/12','NATIONAL','Madison Square Garden');
INSERT INTO MATCHES VALUES (300, 020, 'SPRING','155','120','10','20/03/11','INTERNATIONAL','Palacio de los Deportes de la Comunidad');

INSERT INTO TEAMS VALUES (400, 'Miami Heat','463 Neville Street','60');
INSERT INTO TEAMS VALUES (500, 'L.A. Lakers','1544 Adams Avenue','25');

INSERT INTO PLAYERPOSITION VALUES (150, 'Forward');
INSERT INTO PLAYERPOSITION VALUES (151, 'Center');
INSERT INTO PLAYERPOSITION VALUES (152, 'Guard');
INSERT INTO PLAYERPOSITION VALUES (153, 'Forward-Center');
INSERT INTO PLAYERPOSITION VALUES (154, 'Center-Forward');
INSERT INTO PLAYERPOSITION VALUES (155, 'Guard-Forward');

INSERT INTO CLUBS VALUES (550, 200, 'Rade','2982 Chipmunk Lane','ME 04101','New York','USA');
INSERT INTO CLUBS VALUES (650, 300, 'Waril','1 Ronda de Azkue','BO 48902','Alava','SPAIN');

INSERT INTO POTM VALUES (160, 027, 'Kobe','Bryant');
INSERT INTO POTM VALUES (161, 004, 'Lebron','James');
INSERT INTO POTM VALUES (162, 016, 'Andrew','Goudelock');
INSERT INTO POTM VALUES (163, 005, 'Rashard','Lewis');
INSERT INTO POTM VALUES (164, 026, 'Chris','Duhon');

INSERT INTO MANAGERS VALUES (800, 810, 820, 'Pat','Riley','Miami Heat');
INSERT INTO MANAGERS VALUES (801, 811, 821, 'Mitch','Kupchak','L.A. Lakers');

INSERT INTO COACHES VALUES (810, 800, 820, 'Erik','Spoelstra','Miami Heat');
INSERT INTO COACHES VALUES (811, 801, 821, 'Mike','Antoni','L.A. Lakers');

INSERT INTO CLUBOWNERS VALUES (820, 800, 810, 550, 'Mike','Woodson','Rade');
INSERT INTO CLUBOWNERS VALUES (821, 801, 811, 650, 'Jacque','Vaughn','Waril');



SENTENCIAS SQL (DDL, DML, DCL Y TCL)

DATA DEFINITION LANGUAGE ( DDL)

Se utilizan para definir la estructura de base de datos o esquema.
Es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de definición de las estructuras que almacenarán los datos así como de los procedimientos o funciones que permitan consultarlos.
Un Data Definition Language o Lenguaje de descripción de datos ( DDL ) es un lenguaje de programación para definir estructuras de datos .
El término DDL fue introducido por primera vez en relación con el modelo de base de datos CODASYL, donde el esquema de la base de datos ha sido escrito en un lenguaje de descripción de datos que describe los registros, los campos, y "conjuntos" que conforman el usuario modelo de datos.
Más tarde fue usado para referirse a un subconjunto de SQL, pero ahora se utiliza en un sentido genérico para referirse a cualquier lenguaje formal para describir datos o estructuras de información, como los esquemas XML.

CREATE - PARA CREAR OBJETOS EN LA BASE DE DATOS
ALTER - ALTERA LA ESTRUCTURA DE LA BASE DE DATOS
DROP - ELIMINA LOS OBJETOS DE LA BASE DE DATOS
TRUNCATE - ELIMINAR TODOS LOS REGISTROS DE UNA TABLA , INCLUYENDO TODOS LOS ESPACIOS ASIGNADOS A LOS REGISTROS SE ELIMINAN
COMMENT - AGREGAR COMENTARIOS AL DICCIONARIO DE DATOS
RENAME - CAMBIAR EL NOMBRE DE UN OBJETO

DATA MANIPULATION LANGUAGE (DML)

Se utilizan para la gestión de datos dentro de los objetos de esquema.
Es un idioma proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Bases de Datos del Sistema Gestor de Bases de Datos. El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras.

SELECT - RECUPERAR DATOS DE LA BASE DE DATOS.
INSERT - INSERTAR DATOS EN UNA TABLA .
UPDATE - ACTUALIZACIONES DE DATOS EXISTENTES EN UNA TABLA.
DELETE - ELIMINA TODOS LOS REGISTROS DE UNA TABLA.
MERGE - OPERACIÓN UPSERT (INSERCIÓN O ACTUALIZACIÓN).
CALL - LLAMA A UN PL / SQL O SUBPROGRAMA JAVA.
EXPLAIN PLAN - EXPLICAR LA RUTA DE ACCESO A LOS DATOS.
LOCK TABLE - CONCURRENCIAS DE CONTROL.

DATA CONTROL LANGUAGE (DCL)

Un Lenguaje de Control de Datos (DCL por sus siglas en inglés: Data Control Language) es un lenguaje proporcionado por el Sistema de Gestión de Base de Datos que incluye una serie de comandos SQL que permiten al administrador controlar el acceso a los datos contenidos en la Base de Datos.
Algunos ejemplos de comandos incluidos en el DCL son los siguientes:
GRANT: Permite dar permisos a uno o varios usuarios o roles para realizar tareas determinadas.
REVOKE: Permite eliminar permisos que previamente se han concedido con GRANT.
Las tareas sobre las que se pueden conceder o denegar permisos son las siguientes:
CONNECT
SELECT
INSERT
UPDATE
DELETE
USAGE
En Oracle, la ejecución de un comando DCL implica un COMMIT de forma implícita. Sin embargo, en PostgreSQL, la ejecución de un comando DCL forma parte de una transacción, por lo que puede ser deshecha mediante el comando ROLLBACK.

CONTROL DE TRANSACCIÓN (TCL)

Es un lenguaje de programación y un subconjunto de SQL , que se utiliza para controlar el procesamiento de transacciones en una base de datos.
Una transacción es una unidad lógica de trabajo que comprende una o más sentencias SQL, por lo general un grupo de Data Manipulation Language (DML).
Ejemplos de comandos de TCL incluyen:
COMMIT - GUARDA EL TRABAJO REALIZADO.
SAVEPOINT - IDENTIFICA UN PUNTO EN UNA TRANSACCIÓN A LA QUE MÁS TARDE SEVPUEDE VOLVER.
ROLLBACK - RESTAURAR LA BASE DE DATOS A LA ORIGINAL, HASTA EL ÚLTIMO COMMIT.
SET TRANSACTION - CAMBIA LAS OPCIONES DE TRANSACCIÓN COMO NIVEL DE AISLAMIENTO Y QUÉ SEGMENTO DE CANCELACIÓN UTILIZA.

lunes, 3 de marzo de 2014

Procedimiento INSERT INTO Oracle

--Creamos la tabla donde queremos depositar los datos
CREATE TABLE CRM_CLIENTE_TEMP (
  USUARIO_ID       NUMBER (5)    NOT NULL,
  USUARIO_NOMBRE      VARCHAR2 (20)  NOT NULL,
  CREADO_POR    VARCHAR2 (20)  NOT NULL,
  CREADO_FECHA  DATE          NOT NULL,
  PRIMARY KEY (USUARIO_ID) );

--Creamos el procedimiento con 4 parametros de entrada y del tipo %TYPE
CREATE OR REPLACE PROCEDURE INSERTA_USUARIO(LN_USUARIO_ID IN CRM_CLIENTE_TEMP.USUARIO_ID%TYPE,
       LV_USUARIO_NOMBRE IN CRM_CLIENTE_TEMP.USUARIO_NOMBRE%TYPE,
       LV_CREADO_POR IN CRM_CLIENTE_TEMP.CREADO_POR%TYPE,
       LV_DATE IN CRM_CLIENTE_TEMP.CREADO_FECHA%TYPE) IS

LV_ERROR VARCHAR2(1000);
LN_ERROR NUMBER;

BEGIN

  INSERT INTO CRM_CLIENTE_TEMP ("USUARIO_ID", "USUARIO_NOMBRE", "CREADO_POR", "CREADO_FECHA")
  VALUES (LN_USUARIO_ID, LV_USUARIO_NOMBRE,LV_CREADO_POR, LV_DATE);
 
  EXCEPTION WHEN OTHERS THEN
  ln_error:= SQLCODE;
  lv_error:= SQLERRM;
 
  DBMS_OUTPUT.put_line('Código de Error:'||TO_CHAR(ln_error));
  DBMS_OUTPUT.put_line('Mensaje de Error:'||lv_error);

  COMMIT;

END;

--Llamamos el procedimiento con los valores que queremos y automáticamente se insertan en la tabla
BEGIN
   INSERTA_USUARIO(1000,'CARLOS ROBERTO DÍAZ GUTIÉRREZ',USER,SYSDATE);
END;

viernes, 21 de febrero de 2014

Ejemplo de Set_Block_Property('BLOQUE',DEFAULT_WHERE,CONDICION) Oracle Forms

--Creamos la Unidad de Programa

PROCEDURE carga_bloque IS
Ln_num_dpto NUMBER;
Ln_num_plantilla NUMBER;
Lv_where varchar2(200);

BEGIN
--Se crean 2 variables que vienen asignadas de 2 parámetros
  Ln_num_dpto:=:PARAMETER.NUM_DPTO;
  Ln_num_plantilla:=:PARAMETER.NUM_PLANTILLA;
--Creamos la variable condición
  Lv_where:='NUM_DPTO='||Ln_num_dpto||' and NUM_PLANTILLA='||Ln_num_plantilla;
  --Creamos un mensaje de la condición
  :msg:=lv_where;
  go_block('BL_DOCUMENTO_ETAPA');
--Seteamos el default where
  Set_Block_Property('BL_DOCUMENTO_ETAPA',DEFAULT_WHERE,Lv_where);
  do_key('Execute_Query');
END;

jueves, 20 de febrero de 2014

Consultas dinámicas en Oracle

--Creación de una tabla copiada de un select
CREATE TABLE TABLA_PRUEBA
AS
SELECT * FROM EMP;


--Consulta dinámica para dar privilegios de manera automática a un usuario
SELECT    'GRANT SELECT INSERT, UPDATE, DELETE ON '|| TABLE_NAME|| ' TO USUARIO;'
FROM USER_TABLES;


--Consulta dinámica para crear un sinónimo público a un usuario determinado
SELECT 'CREATE SYNONYM '|| OBJECT_NAME|| '  FOR USUARIO.'|| OBJECT_NAME|| ';'
  FROM ALL_OBJECTS
 WHERE OWNER = USER
       AND OBJECT_TYPE IN
              ('TABLE',
               'VIEW',
               'PROCEDURE',
               'PACKAGE',
               'TRIGGERS',
               'SEQUENCES');
             

viernes, 14 de febrero de 2014

ORA-00054 RECURSO OCUPADO Y OBTENIDO CON NOWAIT ESPECIFICADO

Matar tablas Oracle con Bloqueo

select substr(a.os_user_name,1,8) "OS User"
, substr(b.object_name,1,30) "Object Name"
, substr(b.object_type,1,8) "Type"
, substr(c.segment_name,1,10) "RBS"
, e.process "PROCESS"
, substr(d.used_urec,1,8) "# of Records"
, e.sid
, e.serial#
, p.*
from v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr

Si intentamos por ejemplo hacer un "drop table" obtendremos un error del tipo ORA-00054: recurso ocupado y obtenido con NOWAIT.

Para desbloquear uno de los objetos usamos alguna de las siguientes sentencias

ALTER SYSTEM DISCONNECT SESSION 'SID, SERIAL' IMMEDIATE;

o bien

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

Este blog no es de autoría personal lo vi por ahí pero me parece de suma importancia porque a veces ni matando la sesión por medio de TOAD o reiniciando la base de datos funciona.
El blog es:

http://dieguz2.blogspot.com 

viernes, 31 de enero de 2014

Desinstalar Oracle Database 11g R2

Inicio
Oracle OraDb11g_home1
Universal Installer
Install Products
Marcamos Oracle Database 11g 11.2.0.1.0
Remove -> Yes
Show Empty home
Marcamos OraDb11g_home1
Remove -> Yes

Nos vamos al Regedit:
Regedit
Hkey_Local_Machine
Software
ORACLE -> click derecho -> delete -> Yes
System
Current Control Set
Oracle11 -> click derecho -> delete -> Yes
Oracle DBConsole -> click derecho -> delete -> Yes
OracleJobSchudeler -> click derecho -> delete -> Yes
OracleOraDb11g_home1TNSListener -> click derecho -> delete -> Yes
OracleRemExeService -> click derecho -> delete -> Yes
OracleService -> click derecho -> delete -> Yes
OracleVssWriter -> click derecho -> delete -> Yes

Reiniciamos la máquina

Borramos el directorio del disco duro app o Oracle por ejemplo, el directorio donde estaba instalada la Base de Datos

Nos vamos a ProgramFiles

Buscamos el directorio Oracle y lo borramos

Luego
Inicio
Oracle OraDb11g_home1 y lo borramos

Listo!

miércoles, 29 de enero de 2014

Depurar procesos en Oracle (Debug Procedures in Oracle)

La herramienta de administración TOAD for Oracle incluye la depuración de procesos, este paquete llamado DBMS_DEBUG es un paquete incorporado de Oracle que nos brinda la facilidad de depurar nuestros procesos, el DBA o SYS ya lo tienen incorporado, si queremos otorgarle el derecho de "debuggear" a cualquier otro esquema de la base de datos debemos de digitar el siguiente código

Privilegios requeridos para depurar:
GRANT CREATE SESSION TO nombre_usuario;
GRANT ALTER SESSION TO nombre_usuario;
GRANT EXECUTE ON DBMS_DEBUG to nombre_usuario;

Código para depurar cualquier procedimiento, función, paquete, etc...
GRANT CREATE ANY PROCEDURE TO nombre_usuario; --para editar o salvar
GRANT ALTER ANY PROCEDURE TO nombre_usuario; --para compilar

El siguiente código es para privilegios adicionales que son requeridos para depurar en la versión 10g y cualquier versión posterior a esta:
GRANT DEBUG ANY PROCEDURE TO nombre_usuario;
GRANT DEBUG CONNECT SESSION TO nombre_usuario;

*Verificar si el paquete DBMS_DEBUG está correctamente compilado en el esquema SYS.
*Salir y reiniciar TOAD