Procedimiento DELETE en Oracle Database
Como se discutió en la Introducción a los métodos de recolección, tenemos siete funciones de recolección y 3 procedimientos de recolección. Por lo tanto en total tenemos 10 métodos de recolección entre los cuales ya hemos discutido 7 funciones de recolección hasta ahora. Por lo tanto, hoy en este tutorial discutiremos el primer procedimiento de recopilación de PL/SQL, que es el procedimiento DELETE en Oracle Database.
¿Qué es el método de recopilación PL/SQL Delete?
El método de colección DELETE es un procedimiento sobrecargado que elimina elementos de la colección.
¿Qué quiere decir con un procedimiento sobrecargado?
Lo escuchaste bien. El método de recopilación PL/SQL DELETE es un procedimiento sobrecargado. Lo que significa que puede usar el mismo procedimiento de tres maneras diferentes . Estas tres formas diferentes son –
- ELIMINAR :Llamada de procedimiento simple sin ningún parámetro. Por lo tanto, si se utiliza el procedimiento de recopilación PL/SQL DELETE sin ningún parámetro, eliminará todos los elementos de la colección. .
- ELIMINAR (número de índice ) :Llamada a procedimiento con un solo parámetro. Este único parámetro es el número de índice válido de la colección. El procedimiento de recopilación DELETE invocado pasando un número de índice válido eliminará el elemento del índice específico .
- ELIMINAR (índice de inicio, índice de finalización ) : Llamada a procedimiento con dos parámetros. Esta forma de llamar a un procedimiento DELETE se denomina Eliminación de rango . De esta forma, debe especificar dos índices. Y el procedimiento elimina el rango de elementos que se encuentran entre el índice inicial y el índice final .
Si la colección es una matriz asociativa indexada por cadenas, el índice inicial y el índice final son cadenas; de lo contrario, los índices inicial y final son números enteros.
¿Podemos usar el procedimiento DELETE en Oracle Database con todas las colecciones?
Sí, el método de recopilación DELETE se puede utilizar en los tres tipos de recopilación. Estos son:tablas anidadas, VARRAY y matrices asociativas.
¡Espera! Pero si usamos el procedimiento DELETE con VARRAY, ¿no será una colección dispersa?
Como VARRAY no es una colección dispersa, no podemos eliminar filas individuales de ella. Además, la única llamada a procedimiento que podemos ejecutar con VARRAY es la primera. Que es el método de colección DELETE sin argumentos que elimina todos los elementos de la colección. La única forma de eliminar una fila individual de un VARRAY es recortarla desde su extremo usando otro procedimiento llamado TRIM.
¿Podemos esperar alguna excepción con el método de recopilación DELETE?
Sí, hay una excepción asociada con el método de recopilación PL/SQL DELETE. Si el procedimiento DELETE se aplica a una tabla anidada no inicializada y VARRAY, genera una excepción "Collection_is_Null".
Ejemplos del método de recopilación PL/SQL DELETE.
Veamos algunos ejemplos de cada una de las llamadas de Procedimiento DELETE mencionadas anteriormente.
Ejemplo 1:Llamada de procedimiento simple sin argumentos.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Range Delete var_nt.DELETE; FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
Llamar al procedimiento de colección DELETE sin ningún argumento eliminará todos los elementos de la colección sobre los que se aplica. Asimismo, en el ejemplo anterior tenemos una tabla anidada con el nombre “mi_tabla_anidada” sobre la cual aplicamos el procedimiento DELETE. Por lo tanto, en una ejecución exitosa, la llamada al procedimiento eliminará todos los 10 elementos numéricos que están almacenados en él.
Lectura sugerida:Cómo crear una tabla anidada local para el bloque PL/SQL.
Ejemplo 2:Llamada a procedimiento con un solo parámetro
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN DBMS_OUTPUT.PUT_LINE('After Deleted'); --Delete Specific Index var_nt.DELETE(5); IF var_nt.EXISTS(5) THEN DBMS_OUTPUT.PUT_LINE('Value at Index [5] is '|| var_nt(5)); ELSE DBMS_OUTPUT.PUT_LINE('Data is Deleted'); END IF; END; /
Este único parámetro es el número de índice válido de la colección. Además, el procedimiento de recopilación DELETE invocado pasando un número de índice válido eliminará el elemento del índice específico. Entonces, en el ejemplo anterior, especificamos 5 como argumento para el método de recopilación PL/SQL DELETE. Por lo tanto, en una ejecución exitosa, la llamada al procedimiento eliminará el elemento de la colección que se almacena en el índice 5.
Ejemplo 3:Llamada a procedimiento con dos parámetros.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Delete Range var_nt.DELETE(2,6); FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
Esta forma de llamar al procedimiento DELETE se denomina eliminación de rango. Aquí debe especificar dos índices y el procedimiento elimina el rango de elementos que se encuentran entre el índice inicial y el índice final. En el ejemplo anterior, establecemos el índice inicial en 2 y el índice final en 6. Esto significa que, en la ejecución, la llamada al procedimiento DELETE eliminará todos los elementos que se encuentren dentro de este rango.
Continúe y copie los códigos anteriores en su SQL Developer y ejecútelos usted mismo para ver cuáles son los resultados.
También puede ver el video tutorial sobre el mismo tema para obtener una explicación en vivo de todos los ejemplos anteriores.
Ese es el tutorial sobre el método de recopilación PL/SQL DELETE en Oracle Database. Espero que hayas disfrutado leyendo y aprendido algo nuevo. Asegúrate de compartir este blog en tus redes sociales. También únase a mí en mi página de Facebook para obtener más conceptos interesantes de PL/SQL.
¡Gracias y que tengas un gran día!