ORACLE - Funciones de Caracteres: Rtrim

La funcion rtrim remueve todos los caracteres especificados comenzando desde la derecha

La sintaxis es:


rtrim( cadena, [ cadena elimina] )

Cadena es la cadena de caracteres de la cual eliminar los valores


Cadena elimina es la cadena de caracteres que tenes que buscar para eliminar

Ejemplos :

rtrim('hola '); retorna 'hola'
rtrim('hola ',''); retorna 'hola'

rtrim('Rosarioddd',d) retorna 'Rosario'

ORACLE - Funciones de Caracteres: Length

La funcion length retorna la longitud de la cadena expresada en cantidad de caracteres

La sintaxis es:

length(cadena)

Cadena es la cadena de caracteres de la cual queres evaluar su longitud

Ejemplos :

replace(''); retorna null

replace('Hola Mundo'); retorna 10

ORACLE - Funciones de Caracteres: Replace

La funcion Replace de un cadena de caracteres un caracter por otro.

La sintaxis es:

replace( cadena, caracter a reemplazar, caracter que reemplaza)

cadena1: cadena en la cual se va a buscar el caracter a reemplazar
caracter a reemplazar : es el caracter que se tiene que buscar en la cadena de caracteres y se quiere reemplazar
caracter que reemplaza es opcional : En todos los lugares donde se detecta la existencia de un caracter a reemplazar se reemplaza por el caracter incluido en este parametro, en caso de que se omita este parametro, simplemente se va a eliminar el caracter detectado.

Ejemplos :

replace('12hola12', '12'); retorna 'hola'
replace('mundo22', '2', '3'); return 'mundo33'
replace('0000123', '0'); retorna '123'

ORACLE - Funciones de Caracteres: Concat

La funcion Concat une dos cadena de caracteres.

La sintaxis es:

to_char( cadena1,cadena2)

cadena1:es el primer string de la cadena
cadena2:es el segundo string de la cadena


Ejemplos :

concat('Hola', ' Mundo'); retorna 'Hola Mundo'.
concat('A', 'AA'); retorna 'AAA'

ORACLE : Modificar Estructura de Tablas

La modificación de la estructura de las tablas con el uso de ALTER permite:
- Agregar nuevas columnas a las tablas.
- Modificar el ancho de la columna.
- Modificar el tipo de datos de la columna(en este caso la columna no tiene que tener datos).
- Modificar la longitud de una columna.

EJEMPLO 1:
ALTER TABLE Clientes
ADD ( saldo integer, sucursal char )

En el ejemplo anterio le agregamos a la tabla CLientes la columna Saldo de tipo entero y la columna Sucursal de tipo caracter.

EJEMPLO 2 :
ALTER TABLE Clientes
MODIFY ( Nombre char(50) );

En el Ejemplo anterior modificamos la longitud del campo Nombre de la tabla clientes que era de tipo caracter que era de char(40) a char(50)

ORACLE - Creación de Secuencias para campos autonumericos

La codificación numérica de por ejemplo un producto se puede realizar con una creación de una secuencia que automáticamente genera los números enteros en orden ascendente, no siendo necesario recordar cuál fue el último número asignado ; esto evita la duplicidad de códigos.

La secuencia es un objeto que genera valores enteros únicos y se emplean para crear claves primarias numéricas, con el uso del siguiente mandato:

CREATE SEQUENCE codigo_producto INCREMENT BY 1 START WITH 100;

En este caso el primer numero generado será 100, porque le pusimos que comience desde 100


Para registrar un nuevo código con la secuencia definida anteriormente se usa la columna codigo_producto.NEXTVAL, la cual nos dará el siguiente valor que le corresponde a la secuencia.

Para conocer el valor actual de la secuencia, o sea, el último código asignado, se usa la columna codigo_producto.CURRVAL, desde la tabla DUAL del sistema, cuyo fin es poder consultar pseudo_columnas :

SELECT usuario,sysdate,codigo_producto.currval FROM DUAL;

donde:

1.- usuario es el nombre del usuario
2.- sysdate es la fecha del sistema
3.- codigo_producto.currval es el último valor asignado a la secuencia.

EJEMPLO:
INSERT INTO PRODUCTOS_SUC VALUES( codigo_producto.NEXTVAL,'ZAPATOS' );

ORACLE - Funciones de Conversión : To_number

La funcion to_number convierte un texto en un numero.

La sintaxis es :
to_number( texto1, [ format_mask ], [ nls_language ] )
texto1 es un texto que querra ser convertido en numero.
format_mask es opcional. Este es el formato que será usado para convertir el texto1 en numero
nls_language es opcional. Este es el lenguaje usado en convertir texto1 en numero.

Ejemplo:
to_number('981.53', 9999.99') retornará el numero 981.53
to_number('225', '999') retornará el numero 225
to_number('23', '99') retornará el numero 23

Tanto el formato como el lenguaje son opcionales, por lo cual usted podrá convertir un texto en numero de una forma simple, por ejemplo:
to_number('1210.73'') would return the number 1210.73

ORACLE - Funciones Fecha : Add_Months

La funcion add_months la fecha inicial mas el numero de meses correspondiente.

La sintaxis es:
add_months( fecha,numero meses)
date : es la fecha de comiendo del calculo (before the n months have been added).

numero de meses : es el numero de meses que hay que sumarle a la fecha.

Example:
add_months('10-Feb-08', 1) would return '10-Mar-08'
add_months('01-Ago-03', 3) would return '01-Nov-03'
add_months('01-Sep-08', -3) would return '01-Jun-08'

Aplica :
* Oracle 8i
* Oracle 9i
* Oracle 10g
* Oracle 11g

ORACLE - Tipos de SQL (DELETE, INSERT, UPDATE)

Tipos de SQL de Acción (DELETE, INSERT, UPDATE ):
Los SQL son aquellas que no devuelven ningún registro, son las encargadas de acciones como añadir y borrar y modificar registros.

DELETE
Crea un SQL que elimine los registros de una o más de las tablas listadas en la cláusula FROM que cumpla la cláusula WHERE. Este SQL elimina los registros completos, no es posible eliminar el contenido de algún campo en particular.
Su sintaxis es:

DELETE FROM NombreTabla WHERE “criterio selección de datos”

DELETE es especialmente útil cuando se desea eliminar varios registros. En una instrucción DELETE con múltiples tablas, debe incluir el nombre de tabla (Tabla.*). Si especifica más de una tabla desde la que eliminar registros, todas deben ser tablas de muchos a uno. Si desea eliminar todos los registros de una tabla, eliminar la propia tabla es más eficiente que ejecutar una consulta de borrado.

Se puede utilizar DELETE para eliminar registros de una única tabla o desde varios lados de una relación uno a muchos. Las operaciones de eliminación en cascada en una consulta únicamente eliminan desde varios lados de una relación.
Por ejemplo, en la relación entre las tablas Clientes y Pedidos, la tabla Pedidos es la parte de muchos por lo que las operaciones en cascada solo afectaran a la tabla Pedidos. Una consulta de borrado elimina los registros completos, no únicamente los datos en campos específicos. Si desea eliminar valores en un campo especificado, crear una consulta de actualización que cambie los valores a Null.

Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operación. Si desea saber qué registros se eliminarán, primero examine los resultados de una consulta de selección que utilice el mismo criterio y después ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en todo momento. Si elimina los registros equivocados podrá recuperarlos desde las copias de seguridad.

DELETE FROM Proveedor WHERE Ciudad = 'Cordoba';

INSERT INTO
Agrega un registro en una tabla. Se la conoce como una consulta de datos añadidos. Esta consulta puede ser de dos tipo: Insertar un único registro ó Insertar en una tabla los registros contenidos en otra tabla.

Para insertar un único Registro:
En este caso la sintaxis es la siguiente:

INSERT INTO NombreTabla (Nombrecampo1, Nombrecampo2, Nombrecampo3, .., campoN)

VALUES (valor1, valor2,valor3,..., valorN)

Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y así sucesivamente. Hay que prestar especial atención a acotar entre comillas simples (') los valores literales (cadenas de caracteres) y las fechas indicarlas en formato mm-dd-aa y entre caracteres de almohadillas (#).

Para insertar Registros de otra Tabla:
En este caso la sintaxis es:

INSERT INTO Tabla [IN base_externa] (campo1, campo2, ..., campoN)

SELECT TablaOrigen.campo1, TablaOrigen.campo2, ….., TablaOrigen. campoN FROM TablaOrigen

En este caso se seleccionarán los campos 1,2, ..., n de la tabla origen y se grabarán en los campos 1,2,.., n de la Tabla. La condición SELECT puede incluir la cláusula WHERE para filtrar los registros a copiar. Si Tabla y TablaOrigen poseen la misma estructura podemos simplificar la sintaxis a:

INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen

De esta forma los campos de TablaOrigen se grabarán en Tabla, para realizar esta operación es necesario que todos los campos de TablaOrigen estén contenidos con igual nombre en Tabla. Con otras palabras que Tabla posea todos los campos de TablaOrigen (igual nombre e igual tipo).

En este tipo de consulta hay que tener especial atención con los campos contadores o autonuméricos puesto que al insertar un valor en un campo de este tipo se escribe el valor que contenga su campo homólogo en la tabla origen, no incrementándose como le corresponde.

Se puede utilizar la instrucción INSERT INTO para agregar un registro único a una tabla, utilizando la sintaxis de la consulta de adición de registro único tal y como se mostró anteriormente. En este caso, su código específica el nombre y el valor de cada campo del registro. Debe especificar cada uno de los campos del registro al que se le va a asignar un valor así como el valor para dicho campo. Cuando no se especifica dicho campo, se inserta el valor predeterminado o Null. Los registros se agregan al final de la tabla.

También se puede utilizar INSERT INTO para agregar un conjunto de registros pertenecientes a otra tabla o consulta utilizando la cláusula SELECT ... FROM como se mostró anteriormente en la sintaxis de la consulta de adición de múltiples registros. En este caso la cláusula SELECT especifica los campos que se van a agregar en la tabla destino especificada.

La tabla destino u origen puede especificar una tabla o una consulta.

Si la tabla destino contiene una clave principal, hay que asegurarse que es única, y con valores no-Null ; si no es así, no se agregarán los registros. Si se agregan registros a una tabla con un campo Incremental , no se debe incluir el campo Incremental en la consulta. Se puede emplear la cláusula IN para agregar registros a una tabla en otra base de datos.

Se pueden averiguar los registros que se agregarán en la consulta ejecutando primero una consulta de
selección que utilice el mismo criterio de selección y ver el resultado. Una consulta de adición copia los registros de una o más tablas en otra. Las tablas que contienen los registros que se van a agregar no se verán afectadas por la consulta de adición. En lugar de agregar registros existentes en otra tabla, se puede especificar los valores de cada campo en un nuevo registro utilizando la cláusula VALUES. Si se omite la lista de campos, la cláusula VALUES debe incluir un valor para cada campo de la tabla, de otra forma fallará INSERT.

INSERT INTO Clientes SELECT Clientes_Viejos.* FROM Clientes_Nuevos;

INSERT INTO Empleados ( NombreApellido, Sueldo, Cargo)

VALUES ('Alberto Sanches', 12500, 'Gerente');

INSERT INTO Empleados SELECT Vendedores.* FROM Vendedores

WHERE Fecha_Contratacion <>UPDATE

Crea una consulta de actualización que cambia los valores de los campos de una tabla especificada basándose en un criterio específico. Su sintaxis es:

UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN
WHERE Criterio;

UPDATE es especialmente útil cuando se desea cambiar un gran número de registros o cuando éstos se
encuentran en múltiples tablas. Puede cambiar varios campos a la vez. El ejemplo siguiente incrementa los
valores Cantidad en un 15 por ciento y los valores Transporte en un 5 por ciento para aquellos que se hayan enviado a la cuidad de Córdoba.:

UPDATE Facturas SET Cantidad = Cantidad * 1.15, Transporte = Transporte * 1.05

WHERE CiudadEnvío = 'Córdoba';

UPDATE no genera ningún resultado. Para saber qué registros se van a cambiar, hay que examinar primero el resultado de una consulta de selección que utilice el mismo criterio y después ejecutar la consulta de actualización.

UPDATE Empleados SET Organigrama = 5 WHERE Organigrama = 2;

UPDATE Productos SET Stock = Stock * 1.1 WHERE Proveedor = 8 AND Familia = 3;

Si en una consulta de actualización suprimimos la cláusula WHERE todos los registros de la tabla señalada serán actualizados.

UPDATE Empleados SET SalarioNeto = SalarioNeto * 1.1

Oracle Tuning : Paso 4 - Reestructurar los SQL

* Evitar el uso de transformaciones en la cláusula WHERE
* Evitar el uso de funciones en la clausula WHERE
* Evitar expresiones de distinto tipo de datos
* Evitar conversiones de datos implícitas
* Escribir consultas separadas para tareas específicas.
* Utilizar UNION ALL
* Utilizar EXISTS en lugar de IN para las subconsultas
* Controlar las formas de acceso y el orden de los joins con hints
* Escribir los predicados de la WHERE usando AND e =, no usar LIKE en lo posible

Oracle Tuning : Paso 3 - Revisar planes de Ejecución

* El tipo de Join debe ser apropiado al número de filas a procesar
* La tabla guía es la que tiene mejor filtro
* Deben derivarse al siguiente paso la menor cantidad de filas
* Las vistas deben ser usadas eficientemente
* Examinar la cláusula where respecto a las filas procesadas en cada tabla
* Un Full Table Scan no implica ineficiencia
* Cada tabla debe ser accedida eficientemente
* No deben existir productos cartesianos que no hayan sido hechos a propósito

Oracle Tuning : Paso 2- Verificar y Controlar las Estadisticas

* Para todas las tablas e indices se deben Recopilar estadísticas.
* Hacer pruebas y analizar variantes de forma tal de poder recalcular nuevamente las stadísticas cada vez que los datos existentes varíen en forma significativa para que éstas sean representativas del estado de la base de datos.

Oracle Tuning : Paso 1- Indentificar las Consultas con problemas

* Identificar programas con problemas de performance.
* Analizar el código SQL de los programas, tanto en la base de datos como en la aplicación
* Hacerle pequeñas variantes al SQL y analizar los cambios en lso tiempos de respuesta:.
* Utilizar SQL_Trace y TKPROF para identificar las consultas conflictivas.
* Hacerle pequeñas variantes al SQL y analizar los cambios en lso tiempos de respuesta

Oracle : Tuning

Para realizar un correcto Tuning hay que realizar los siguientes pasos :

* Identificar el SQL problemático de la base
* Verificar estadísticas del optimizador correspondiente
* Revisar planes de ejecución
* Reestructurar sentencias SQL
* Reestructurar índices

En breve se agregará el detalle de cada uno de estos pasos