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

ORACLE - Funciones Fecha : To_Date

La funcion to_date convierte un string en fecha.

La sintaxis es:

to_date( string1, [ format_mask ], [ nls_language ] )

string1 es la cadena que va a ser convertido a fecha.

format_mask is optional. este es el formato que va a ser usado para convertir de cadena a fecha.

nls_language is optional. Es el lenguaje usado para convertir de cadena a fechaa.


Los posibles paraemtros usados como format_mask .

ParameterExplanation
YEARYear, spelled out
YYYY4-digit year
YYY
YY
Y
Last 3, 2, or 1 digit(s) of year.
IYY
IY
I
Last 3, 2, or 1 digit(s) of ISO year.
IYYY4-digit year based on the ISO standard
RRRRAccepts a 2-digit year and returns a 4-digit year.
A value between 0-49 will return a 20xx year.
A value between 50-99 will return a 19xx year.
QQuarter of year (1, 2, 3, 4; JAN-MAR = 1).
MMMonth (01-12; JAN = 01).
MONAbbreviated name of month.
MONTHName of month, padded with blanks to length of 9 characters.
RMRoman numeral month (I-XII; JAN = I).
WWWeek of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
WWeek of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IWWeek of year (1-52 or 1-53) based on the ISO standard.
DDay of week (1-7).
DAYName of day.
DDDay of month (1-31).
DDDDay of year (1-366).
DYAbbreviated name of day.
JJulian day; the number of days since January 1, 4712 BC.
HHHour of day (1-12).
HH12Hour of day (1-12).
HH24Hour of day (0-23).
MIMinute (0-59).
SSSecond (0-59).
SSSSSSeconds past midnight (0-86399).
FFFractional seconds. Use a value from 1 to 9 after FF to indicate the number of digits in the fractional seconds. For example, 'FF4'.
AM, A.M., PM, or P.M.Meridian indicator
AD or A.DAD indicator
BC or B.C.BC indicator
TZDDaylight savings information. For example, 'PST'
TZHTime zone hour.
TZMTime zone minute.
TZRTime zone region.

Ejemplos:

to_date('2008/07/09', 'yyyy/mm/dd')would return a date value of July 9, 2008.
to_date('070908', 'MMDDYY')would return a date value of July 9, 2008.
to_date('20080315', 'yyyymmdd')would return a date value of Mar 15, 2008.
More Oracle
Mas Oracle