Usar manipular datos
Oracle proporciona comandos de lenguaje de manipulación de datos para ejercitar operaciones de datos en la base de datos. Las operaciones de datos pueden rellenar las tablas de la base de datos con la aplicación o los datos comerciales, modificar los datos y eliminar los datos de la base de datos, cuando sea necesario. Además de las operaciones de datos, hay un conjunto de comandos que se utilizan para controlar estas operaciones. Estos comandos se agrupan como Lenguaje de control de transacciones.
Hay tres tipos de declaraciones DML involucradas en una transacción SQL lógica, a saber, Insertar, Actualizar, Eliminar y Combinar. Una transacción es la colección lógica de acciones DML dentro de una sesión de base de datos.
INSERTAR declaración
El comando INSERT se utiliza para almacenar datos en tablas. El comando INSERT se utiliza a menudo en lenguajes de programación de alto nivel como Visual Basic.NET o C ++ como comando SQL incorporado; sin embargo, este comando también se puede ejecutar en la línea de comandos SQL * PLUS en el modo de comando. Hay dos formas diferentes del comando INSERT. El primer formulario se utiliza si una nueva fila tendrá un valor insertado en cada columna de la fila. La segunda forma del comando INSERT se usa para insertar filas donde algunos de los datos de la columna son desconocidos o están predeterminados de otra lógica empresarial. Esta forma del comando INSERT requiere que especifique los nombres de las columnas para las cuales se almacenan los datos.
Sintaxis:
Se puede seguir la siguiente sintaxis si los valores de todas las columnas de la tabla son definidos y conocidos.
INSERT INTO table
VALUES (column1 value, column2 value,
...);
La siguiente sintaxis se puede usar si solo se deben completar con un valor algunas columnas de la tabla. El resto de las columnas pueden deducir sus valores como NULL o de una lógica empresarial diferente.
INSERT INTO table (column1 name, column2 name, . . .)
VALUES (column1 value, column2 value, . . .);
La instrucción INSERT a continuación crea un nuevo registro de empleado en la tabla EMPLOYEES. Tenga en cuenta que inserta los valores de las columnas primarias EMPLOYEE_ID, FIRST_NAME, SALARY y DEPARTMENT_ID.
INSERT INTO employees (EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID)
VALUES (130, 'KEMP', 3800, 10);
De lo contrario, los datos completos del empleado se pueden insertar en la tabla EMPLOYEES sin especificar la lista de columnas usando la declaración INSERT a continuación, siempre que los valores se conozcan de antemano y deban cumplir con el tipo de datos y la posición de las columnas en la tabla.
INSERT INTO employees
VALUES (130, 'KEMP','GARNER', '[email protected]', '48309290',TO_DATE ('01-JAN-2012'), 'SALES', 3800, 0, 110, 10);
Los valores a insertar deben ser compatibles con el tipo de datos de la columna. Se pueden utilizar literales, valores fijos y valores especiales como funciones, SYSDATE, CURRENT_DATE, SEQ.CURRVAL (NEXTVAL) o USER como valores de columna. Los valores especificados deben seguir las reglas genéricas. Los literales de cadena y los valores de fecha deben ir entre comillas. El valor de la fecha se puede proporcionar en formato DD-MON-RR o D-MON-YYYY, pero se prefiere YYYY ya que especifica claramente el siglo y no depende de la lógica interna de cálculo del siglo RR.
Instrucción INSERT-AS-SELECT (IAS)
Los datos se pueden completar en la tabla de destino desde la tabla de origen mediante la operación INSERT..AS..SELECT (IAS). Es una operación de lectura de ruta directa. Es una forma sencilla de crear una copia de los datos de una tabla a otra o crear una copia de seguridad de la tabla en la que las operaciones de la tabla fuente están en línea.
Por ejemplo, los datos se pueden copiar de la tabla EMPLOYEES a la tabla EMP_HISTORY.
INSERT INTO EMP_HISTORY
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY, DEPARTMENT_ID
FROM employees;
Declaración UPDATE
El comando UPDATE modifica los datos almacenados en una columna. Puede actualizar una o varias filas a la vez, dependiendo del conjunto de resultados filtrado por las condiciones especificadas en la cláusula WHERE. Tenga en cuenta que actualizar columnas es diferente a modificar columnas. Anteriormente en este capítulo, estudió el comando ALTER. El comando ALTER cambia la estructura de la tabla, pero no afecta los datos de la tabla. El comando UPDATE cambia los datos de la tabla, no la estructura de la tabla.
Sintaxis:
UPDATE table
SET column = value [, column = value ...]
[WHERE condition]
De la sintaxis,
La expresión SET column = puede ser cualquier combinación de caracteres, fórmulas o funciones que actualizarán los datos en el nombre de la columna especificada. La cláusula WHERE es opcional, pero si se incluye, especifica qué filas se actualizarán. Solo una tabla puede actualizarse a la vez con un comando UPDATE.
La declaración UPDATE a continuación actualiza el salario del empleado JOHN a 5000.
UPDATE employees
SET salary = 5000
WHERE UPPER (first_name) = 'JOHN';
Aunque los predicados WHERE son opcionales, se deben agregar lógicamente para modificar solo la fila requerida en la tabla. La declaración ACTUALIZAR a continuación actualiza los salarios de todos los empleados en la tabla.
UPDATE employees
SET salary = 5000;
También se pueden actualizar varias columnas especificando varias columnas en la cláusula SET separadas por una coma. Por ejemplo, si tanto el salario como el rol laboral deben cambiarse a 5000 y VENTAS respectivamente para JOHN, la declaración UPDATE se ve así,
UPDATE employees
SET SALARY = 5000,
JOB_ID = 'SALES'
WHERE UPPER (first_name) = 'JOHN';
1 row updated.
Otra forma de actualizar varias columnas de la misma fila muestra el uso de subconsultas.
UPDATE employees
SET (SALARY, JOB_ID) = (SELECT 5000, 'SALES' FROM DUAL)
WHERE UPPER (ENAME) = 'JOHN'
Declaración DELETE
El comando DELETE es una de las sentencias SQL más simples. Elimina una o más filas de una tabla. En SQL no se permiten varias operaciones de eliminación de tablas. La sintaxis del comando DELETE es la siguiente.
DELETE FROM table_name
[WHERE condition];
El comando DELETE elimina todas las filas de la tabla que cumplen la condición de la cláusula opcional WHERE. Dado que la cláusula WHERE es opcional, se pueden eliminar fácilmente todas las filas de una tabla omitiendo una cláusula WHERE ya que la cláusula WHERE limita el alcance de la operación DELETE.
La siguiente declaración DELETE eliminaría los detalles de EDWIN de la tabla EMP.
DELETE employees
WHERE UPPER (ENAME) = 'EDWIN'
1 row deleted.
Nota: DELETE [TABLE NAME] y DELETE FROM [TABLE NAME] tienen el mismo significado.
La condición WHERE en las declaraciones de eliminación condicional puede hacer uso de la subconsulta como se muestra a continuación.
DELETE FROM employees
WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID
FROM LOCATIONS
WHERE LOCATION_CODE = 'SFO')
TRUNCAR
Truncar es un comando DDL que se usa para eliminar todos los registros de una tabla pero conservando la estructura de la tabla. No admite la condición DONDE para eliminar los registros seleccionados.
Sintaxis:
TRUNCATE [table name]
Es Auto Commit, es decir, confirma la transacción activa actual en la sesión. Truncar la tabla no elimina índices dependientes, activadores o restricciones de tabla. Si una tabla A es padre de una restricción de referencia de una tabla B en la base de datos, la tabla A no se puede truncar.
Transacción
Una transacción es una unidad lógica de trabajo realizada en una base de datos. Puede contener:
Varios comandos DML que terminan con un comando TCL, es decir, COMMIT o ROLLBACK
Un comando DDL
Un comando DCL
El comienzo de una transacción se marca con el primer comando DML. Termina con un comando TCL, DDL o DCL. Un comando TCL, es decir, COMMIT o ROLLBACK, se emite explícitamente para finalizar una transacción activa. En virtud de su comportamiento básico, si alguno de los comandos DDL o DCL se ejecuta en una sesión de base de datos, confirme la transacción activa en curso en la sesión. Si la instancia de la base de datos falla de manera anormal, la transacción se detiene.
COMMIT, ROLLBACK y SAVEPOINT son el lenguaje de control de transacciones. COMMIT aplica los cambios de datos de forma permanente en la base de datos, mientras que ROLLBACK realiza la operación anti-commit. SAVEPOINT controla la serie de una transacción estableciendo marcadores en diferentes etapas de la transacción. El usuario puede revertir la transacción actual al punto de guardado deseado, que se configuró anteriormente.
COMMIT- El compromiso finaliza la transacción activa actual aplicando los cambios de datos de forma permanente en las tablas de la base de datos. COMMIT es un comando TCL que finaliza explícitamente la transacción. Sin embargo, el comando DDL y DCL confirma implícitamente la transacción.
SAVEPOINT- Savepoint se utiliza para marcar un punto específico en la transacción actual en la sesión. Dado que es un marcador lógico en la transacción, los puntos de guardado no se pueden consultar en los diccionarios de datos.
ROLLBACK- El comando ROLLBACK se usa para finalizar toda la transacción descartando los cambios de datos. Si la transacción contiene puntos de guardado marcados, ROLLBACK TO SAVEPOINT [nombre] se puede utilizar para revertir la transacción hasta el punto de guardado especificado únicamente. Como resultado, todos los cambios de datos hasta el punto de guardado especificado se descartarán.
Demostración
Considere la tabla EMPLOYEES que se completa con los detalles de los empleados recién contratados durante el primer trimestre de cada año. El personal administrativo agrega cada detalle de los empleados con un punto de guardado, para revertir cualquier dato defectuoso en cualquier momento durante la actividad de alimentación de datos. Tenga en cuenta que mantiene los mismos nombres de los puntos de guardado que los de los empleados.
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (105, 'Allen',TO_DATE ('15-JAN-2013','SALES',10000,10);
SAVEPOINT Allen;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',10000,20);
SAVEPOINT Kate;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',12000,30);
SAVEPOINT McMan;
Supongamos que el operador de alimentación de datos se da cuenta de que ha introducido erróneamente el salario de 'Kate' y 'McMan'. Revierte la transacción activa al punto de guardado Kate y vuelve a ingresar los detalles de los empleados de Kate y McMan.
ROLLBACK TO SAVEPOINT Kate;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',12500,20);
SAVEPOINT Kate;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',13200,30);
SAVEPOINT McMan;
Una vez que haya terminado con la entrada de datos, puede confirmar la transacción completa emitiendo COMMIT en la sesión actual.
Leer consistencia
Oracle mantiene la coherencia entre los usuarios en cada sesión en términos de acceso a datos y acciones de lectura / escritura.
Cuando ocurre un DML en una tabla, los valores de datos originales cambiados por la acción se registran en los registros de deshacer de la base de datos. Siempre que la transacción no se confirme en la base de datos, cualquier usuario en otra sesión que luego consulte los datos modificados verá los valores de los datos originales. Oracle usa la información actual en el área global del sistema y la información en los registros de deshacer para construir una vista consistente de lectura de los datos de una tabla para una consulta. Solo cuando se confirma una transacción, los cambios de la transacción se vuelven permanentes. La transacción es la clave de la estrategia de Oracle para proporcionar consistencia de lectura.
El punto de inicio para vistas coherentes de lectura se genera en nombre de los lectores
Controla cuándo los datos modificados pueden ser vistos por otras transacciones de la base de datos para su lectura o actualización.