sql >> Base de Datos >  >> RDS >> Oracle

Introducción a la declaración FORALL en la base de datos Oracle

Procesamiento masivo de datos mediante declaración FORALL

Sé que el tutorial anterior fue un breve descanso de nuestra serie Bulk Collect. Al fin y al cabo era lo exigido por el público y teníamos la obligación de cumplirlo. Pero no te preocupes, estamos de vuelta en el camino. Entonces, veamos la introducción al Procesamiento masivo de datos usando la declaración FORALL en la base de datos Oracle.

En caso de que no sepa de qué tutorial estoy hablando, consulte aquí. Así que ahora vayamos al tema.

¿Qué es una declaración FORALL?

La declaración FORALL ayuda a procesar datos masivos de manera optimizada mediante el envío de declaraciones DML o una declaración MERGE (si está utilizando 11g o superior) en lotes desde el motor PL/SQL al motor SQL.

También puede definir una declaración FORALL como una construcción de bucle masivo que ejecuta una declaración DML o una declaración MERGE una o varias veces a la vez.

La recopilación masiva optimiza la consulta y aumenta el rendimiento al reducir los cambios de contexto. FORALL hace lo mismo para declaraciones DML como Insertar, Eliminar, Actualizar o para una declaración MERGE.

¿Cuál es la sintaxis de la instrucción FORALL?

La sintaxis es bastante simple, echemos un vistazo.

FORALL index IN bound_clauses 
[SAVE EXCEPTION]
DML statement;

donde:

PARA TODOS es la palabra clave reservada de Oracle.

Índice es un contador de bucle definido implícitamente que el motor PL/SQL declara como PLS_INTEGER. Como está implícitamente definido por el motor PL/SQL, no es necesario que lo defina. El alcance de Index se limita a la instrucción FORALL en la que se define.

Cláusulas_vinculadas son las cláusulas que controlan el número de iteraciones del bucle. Además, el valor del índice también depende de él. Hay tres tipos de cláusulas vinculadas en Oracle PL/SQL que analizaremos por separado más adelante en este tutorial.

GUARDAR EXCEPCIÓN es una opción opcional que mantiene la sentencia FORALL ejecutándose incluso cuando la sentencia DML provoca una excepción. Estas excepciones se guardan en un atributo de cursor denominado SQL%Bulk_Exceptions.

Información:
Debido a SAVE EXCEPTION, la declaración FORALL no finaliza abruptamente incluso cuando hay una excepción. Esta es una ventaja de la declaración FORALL sobre FOR Loop.

Declaración DML :La declaración DML podría ser cualquier declaración DML como INSERTAR, ACTUALIZAR o ELIMINAR. Si está utilizando Oracle 11g o superior, también puede usar la instrucción MERGE con FORALL. Pero debe asegurarse de que su declaración DML o la declaración MERGE deben hacer referencia al menos a una colección en su cláusula VALUES o WHERE.

Además, a diferencia de FOR Loop, con la declaración FORALL solo podemos usar un DML a la vez. Esta es la carencia de FORALL.

¿Es FORALL un bucle como FOR Loop?

No, aunque la declaración FORALL recorre todas las filas de una colección, pero no es un bucle FOR. Si ha visto la sintaxis detenidamente, debe haber notado que, a diferencia de 'FOR Loop', el bloque de la declaración FORALL no comienza con la palabra clave LOOP ni termina con la palabra clave END LOOP.

¿Podemos ejecutar Insertar y Actualizar DML a la vez usando FORALL?

No, desafortunadamente, a diferencia de FOR Loop con FORALL, no podemos ejecutar más de un DML a la vez. Esto significa que puede ejecutar Insertar o Actualizar a la vez, no ambos juntos. Esa es una deficiencia de la declaración FORALL.

¿Qué es el atributo de cursor SQL%Bulk_Exceptions?

El atributo de cursor SQL%Bulk_Exceptions es una colección de registros que tiene dos campos Error_Index y Error_Code. Error_Index almacena el número de iteraciones de la sentencia FORALL en el transcurso de las cuales se ha producido la excepción. Por otro lado, Error_Code almacena el código de excepción que corresponde a la excepción generada.

¿Podemos ver el número de excepciones que se han producido durante la ejecución de la instrucción FORALL?

Puede verificar fácilmente cuántas excepciones se generaron durante la ejecución de la declaración FORALL usando SQL%BULK_EXCEPTION.COUNT.

¿Qué son esas cláusulas vinculantes? Cuéntanos algo sobre ellos.

Como se mencionó anteriormente, las cláusulas Bound controlan el valor del índice de bucle y el número de iteraciones de la instrucción FORALL. Hay tres tipos de cláusulas vinculadas que se pueden usar con la instrucción FORALL en Oracle Database. Estos son:

  1. Límite inferior y superior
  2. Índices de y
  3. Valores de

El límite INFERIOR Y SUPERIOR :Similar a FOR LOOP, en esta cláusula enlazada debe especificar el comienzo y el final válidos de los números de índice consecutivos de la colección a la que se hace referencia.

Es obligatorio especificar un rango válido de números de índice consecutivos junto con esta Cláusula Obligatoria para el número de colecciones a las que se hace referencia en la declaración DML. Sin embargo, existe la posibilidad de error si se descubre que la colección a la que se hace referencia en esta cláusula es escasa. El error que obtendrá es este:

ORA-22160: element at index [3] does not exist

En caso de que su colección a la que se hace referencia sea escasa y esté utilizando Oracle 10g o superior, es posible que desee utilizar las otras dos opciones, que son "Índices de" y "Valores de".

Los ÍNDICES DE :La segunda cláusula vinculada que está disponible para nosotros es 'Índices de'. Esta cláusula enlazada permite que nuestra instrucción FORALL recorra una colección dispersa, como una matriz asociativa o una tabla anidada.

Lectura sugerida:Introducción a la colección PL/SQL

Los VALORES DE :La tercera cláusula vinculante es Valores de. La opción VALUES OF deja en claro que los valores de los elementos de la colección especificada del contador de bucles son la base de los valores en la instrucción FORALL. Básicamente, esta colección es un grupo de índices que la instrucción FORALL puede recorrer. Además, estos índices no tienen por qué ser únicos y pueden enumerarse en un orden arbitrario.

En caso de que aprenda más rápido viendo un video tutorial, aquí hay uno que explica la declaración FORALL en detalle.

Estaremos aprendiendo cómo usar todas estas cláusulas vinculadas con la declaración FORALL en los tutoriales futuros, así que estad atentos. Para obtener la última actualización, puede suscribirse a mi canal de YouTube y seguirme en mis redes sociales.

¡Gracias y que tengas un gran día!