Oracle Insertar, actualizar, eliminar y seleccionar PL/SQL en [Ejemplo]

โšก Resumen inteligente

Sentencias SQL dentro Oracle PL/SQL gestiona todas las tareas de manipulaciรณn de datos, permitiendo que un bloque inserte, actualice, elimine y seleccione filas directamente. Los comandos INSERT, UPDATE, DELETE y SELECT INTO mueven y recuperan datos dentro de la base de datos.

  • โš™๏ธ Comandos DML: Las instrucciones INSERT, UPDATE, DELETE y SELECT INTO realizan todas las tareas de manipulaciรณn de datos dentro de un bloque PL/SQL.
  • โž• Inserciรณn de datos: INSERT INTO agrega filas a partir de VALORES explรญcitos o directamente desde otra tabla usando una sentencia SELECT.
  • ๐Ÿ”„ Actualizaciรณn de datos: La funciรณn UPDATE con SET modifica los valores de las columnas, mientras que una clรกusula WHERE opcional limita las filas afectadas.
  • ๐Ÿ—‘๏ธ Eliminaciรณn de datos: La instrucciรณn DELETE elimina los registros coincidentes, y si se omite la clรกusula WHERE, se borra toda la tabla.
  • ๐ŸŽฏ Seleccionar en: SELECT INTO debe devolver exactamente una fila, o Oracle genera NO_DATA_FOUND o TOO_MANY_ROWS.
  • ๐Ÿค– Asistencia de IA: Los asistentes de IA, como GitHub Copilot, elaboran bloques DML e indican la falta de una clรกusula WHERE o COMMIT.

Oracle PL/SQL Insertar Actualizar Eliminar Seleccionar en

Transacciones DML en PL/SQL

DML significa Lenguaje de Manipulaciรณn de Datos, el grupo de SQL comandos que modifican los datos almacenados en una tabla. Dentro de una Bloque PL / SQLEstos comandos realizan el trabajo de manipulaciรณn, mientras que PL/SQL proporciona la lรณgica subyacente. DML se encarga de las operaciones que se describen a continuaciรณn.

  • Inserciรณn de datos
  • Actualizaciรณn de datos
  • Eliminaciรณn de datos
  • Selecciรณn de datos

En PL/SQL, la manipulaciรณn de datos se realiza รบnicamente mediante comandos SQL.

Inserciรณn de datos

En PL/SQL, se agregan filas a una tabla con el comando SQL INSERT INTO. Este comando recibe como entrada el nombre de la tabla, las columnas de destino y los valores de las columnas, y luego inserta el valor en la tabla base.

El comando INSERT tambiรฉn puede tomar los valores directamente de otra tabla mediante una instrucciรณn SELECT, en lugar de especificar los valores para cada columna. Mediante una instrucciรณn SELECT, se pueden insertar tantas filas como contenga la tabla de origen.

Sintaxis:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
VALUES(<value1>,<value2>,...,<value_n>);
END;

La sintaxis anterior muestra el comando INSERT INTO. El nombre de la tabla y los valores son campos obligatorios, mientras que los nombres de las columnas son opcionales cuando la instrucciรณn INSERT proporciona valores para cada columna de la tabla. La palabra clave VALUES es obligatoria cuando los valores se proporcionan por separado, como se muestra arriba.

Sintaxis:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>;
END;

Esta segunda forma de INSERT INTO toma los valores directamente de utilizando el comando SELECT. La palabra clave VALUES no debe estar presente aquรญ porque los valores no se proporcionan por separado.

Actualizaciรณn de datos

La actualizaciรณn de datos consiste en cambiar el valor de una columna en una fila existente. Esto se realiza con la instrucciรณn UPDATE, que recibe como entrada el nombre de la tabla, el nombre de la columna y el nuevo valor, y actualiza los datos.

Sintaxis:

BEGIN
UPDATE <table_name>
SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be updated>;
END;

La sintaxis anterior muestra la instrucciรณn UPDATE. La palabra clave SET indica al motor PL/SQL que actualice la columna con el valor especificado. La clรกusula WHERE es opcional; si no se incluye, el valor de la columna mencionada se actualiza en toda la tabla.

Eliminaciรณn de datos

La eliminaciรณn de datos consiste en borrar un registro completo de la tabla de la base de datos. Para ello se utiliza el comando DELETE.

Sintaxis:

BEGIN
DELETE FROM <table_name>
WHERE <condition that uniquely identifies the record that needs to be deleted>;
END;

La sintaxis anterior muestra el comando DELETE. La palabra clave FROM es opcional, y con o sin la clรกusula FROM el comando se comporta de la misma manera. La clรกusula WHERE es opcional; si no se especifica, se vaciarรก toda la tabla.

Selecciรณn de datos

La proyecciรณn o recuperaciรณn de datos consiste en obtener la informaciรณn necesaria de la tabla de la base de datos. Esto se logra mediante el comando SELECT junto con la clรกusula INTO. El comando SELECT obtiene los valores de la base de datos, y la clรกusula INTO asigna esos valores a las variables locales del bloque PL/SQL.

Los siguientes puntos deben tenerse en cuenta al utilizar una sentencia SELECT con INTO:

  • Una instrucciรณn SELECT debe devolver solo un registro al usar la clรกusula INTO, porque una variable solo puede contener un valor. Si la instrucciรณn SELECT devuelve mรกs de una fila, Excepciรณn TOO_MANY_ROWS es elevado.
  • La instrucciรณn SELECT asigna el valor a la variable en la clรกusula INTO, por lo que necesita al menos un registro para completar dicho valor. Si no encuentra ningรบn registro, se genera la excepciรณn NO_DATA_FOUND.
  • El nรบmero de columnas y sus tipos de datos en la clรกusula SELECT deben coincidir con el nรบmero de variables y sus tipos de datos en la clรกusula INTO.
  • Los valores se obtienen y completan en el mismo orden que se menciona en la declaraciรณn.
  • La clรกusula WHERE es opcional y permite establecer mรกs restricciones sobre los registros que se recuperan.
  • Una instrucciรณn SELECT se puede utilizar en la condiciรณn WHERE de otras instrucciones DML para definir los valores de las condiciones.
  • Una instrucciรณn SELECT utilizada dentro de instrucciones INSERT, UPDATE o DELETE no debe tener una clรกusula INTO, ya que en esos casos no rellena ninguna variable.

Sintaxis:

BEGIN
SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;

La sintaxis anterior muestra el comando SELECT-INTO. La palabra clave FROM es obligatoria e identifica la tabla de la que se deben obtener los datos. La clรกusula WHERE es opcional; si no se especifica, se obtendrรกn los datos de toda la tabla.

Ejemplo 1: En este ejemplo, veremos cรณmo realizar operaciones DML en PL/SQL. Insertaremos los cuatro registros que se muestran a continuaciรณn en la tabla `emp`.

EMP_NOMBRE EMP_NO SALARIO GENERAL
BBB 1000 25000 AAA
XXX 1001 10000 BBB
YYY 1002 10000 BBB
ZZZ 1003 7500 BBB

Luego actualizaremos el salario de 'XXX' a 15000, eliminaremos el registro del empleado 'ZZZ' y, finalmente, proyectaremos los detalles del empleado 'XXX'.

La captura de pantalla que aparece a continuaciรณn muestra el bloque PL/SQL completo utilizado en este ejemplo.

Oracle Bloque PL/SQL que realiza inserciones, actualizaciones, eliminaciones y selecciones en la tabla emp.

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER;
l_manager VARCHAR2(250);
BEGIN
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('BBB',1000,25000,'AAA');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('ZZZ',1003,7500,'BBB');
COMMIT;
Dbms_output.put_line('Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line('Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT;
Dbms_output.put_line('Values Deleted');
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';
Dbms_output.put_line('Employee Detail');
Dbms_output.put_line('Employee Name:'||l_emp_name);
Dbms_output.put_line('Employee Number:'||l_emp_no);
Dbms_output.put_line('Employee Salary:'||l_salary);
Dbms_output.put_line('Employee Manager Name:'||l_manager);
END;
/

Salida:

Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB

Code Explicaciรณn:

  • Code lรญneas 2-5: Declarando las variables.
  • Code lรญneas 7-14: Insertando los registros en la tabla emp.
  • Code lรญnea 15: Confirmando las transacciones de inserciรณn.
  • Code lรญneas 17-19: Actualizando el salario del empleado 'XXX' a 15000.
  • Code lรญnea 20: Confirmando la transacciรณn de actualizaciรณn.
  • Code lรญnea 22: Eliminando el registro de 'ZZZ'.
  • Code lรญnea 23: Confirmando la transacciรณn de eliminaciรณn.
  • Code lรญnea 25: Seleccionar el registro 'XXX' y completar las variables l_emp_name, l_emp_no, l_salary y l_manager.
  • Code lรญneas 26-30: Mostrando los valores de los registros recuperados.

Preguntas Frecuentes

No. PL/SQL estรกtico no puede ejecutar DDL directamente. Construya la instrucciรณn como una cadena y ejecรบtela con EJECUTAR INMEDIATO, que gestiona las operaciones CREATE, ALTER y DROP en tiempo de ejecuciรณn.

Una sentencia SELECT INTO debe devolver exactamente una fila. Para leer varias filas, utilice una sentencia explรญcita. cursor con un bucle FETCH o BULK COLLECT INTO en una colecciรณn.

DELETE es una operaciรณn DML: elimina las filas seleccionadas con una clรกusula WHERE y se puede revertir. TRUNCATE es una operaciรณn DDL: borra todas las filas al instante, se confirma automรกticamente y no se puede deshacer.

Sรญ. Los cambios de INSERTAR, ACTUALIZAR y ELIMINAR permanecen en su sesiรณn hasta que usted COMETERPL/SQL no realiza confirmaciones automรกticas. Utilice COMMIT para guardar o ROLLBACK para descartar.

La funciรณn MERGE realiza una operaciรณn de inserciรณn/actualizaciรณn (upsert), es decir, actualiza las filas que coinciden con una condiciรณn de uniรณn e inserta las que no, en una sola instrucciรณn en lugar de realizar operaciones de ACTUALIZACIร“N e INSERCIร“N por separado.

RETURNING INTO captura los valores de las columnas de las filas que acaban de ser afectadas por una operaciรณn INSERT, UPDATE o DELETE y los almacena en variables, evitando asรญ una consulta SELECT adicional para leer los datos modificados.

Sรญ. Copiloto de GitHub Borradores de bloques INSERT, UPDATE, DELETE y SELECT INTO a partir de un comentario breve, sugieren variables de enlace y completan las listas de columnas, aunque conviene revisar primero la lรณgica.

Los asistentes de IA analizan el cรณdigo DML en busca de clรกusulas WHERE faltantes, COMMIT ausentes y concatenaciones inseguras, para luego sugerir soluciones y explicar los errores. Esta revisiรณn mediante aprendizaje automรกtico detecta cambios riesgosos antes de que lleguen a producciรณn.

Resumir este post con: