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

Declaración FORALL con la cláusula enlazada VALUES-OF en la base de datos Oracle

Hasta ahora, hemos aprendido a usar la declaración FORALL con una colección densa que usa la cláusula de límite inferior y superior y una colección dispersa que usa la cláusula de límite INDICES OF. ¿Qué pasa si queremos usar la declaración FORALL solo con elementos seleccionados de la colección? ¿Podemos hacer eso? Sí, podemos hacerlo fácilmente usando la declaración FORALL con la tercera y última cláusula enlazada que es 'VALUES-OF'.

¿Qué es una cláusula vinculada de 'Valores de'?

La declaración FORALL tiene que ver con vincular los elementos de la colección con una sola declaración DML de manera optimizada. Usando la cláusula enlazada 'Valores de' de la declaración FORALL, podemos vincular los elementos seleccionados de la colección con la declaración DML.

¿Cuál es la sintaxis de la cláusula vinculada 'Valores de'?

Antes de entender cómo funcionan los valores de la cláusula enlazada, echemos un vistazo a su sintaxis y aprendamos cuál es la forma sintácticamente correcta de usar la cláusula 'Valores de' con la instrucción FORALL en Oracle Database.

FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Información:
Recuerde siempre que el nombre de la cláusula es VALORES-DE no VALOR-DE. Escribir VALUE-OF causará un error que podría terminar su programa.
VALORES DE DERECHO
VALOR DE mal

¿Cómo funciona la cláusula Values-of-bound?

La cláusula de valores de límite requerirá dos colecciones. La primera colección será la 'Colección de origen' . Realizaremos operaciones DML como insertar, eliminar y actualizar los datos de esta colección mediante la instrucción FORALL.

La segunda colección será la 'Colección de indexación ', que especificará el número de índice de los elementos seleccionados de la primera colección. Estos elementos seleccionados serán aquellos elementos sobre los que desea realizar las operaciones DML.

Como la cláusula Values-ofbound especifica que el valor de la variable Loop Index ('idx' en la sintaxis anterior) de la declaración FORALL se basa en los valores del elemento en la otra colección. Por lo tanto, nos hemos referido a esa otra colección como colección de indexación en la sintaxis anterior.

Entonces, ¿qué es esta colección de indexación?

La colección de indexación es un grupo de índices por los que puede pasar la sentencia FORALL. Esta colección podría ser una colección densa así como una colección escasa. Además, los números de índice almacenados en la colección no necesitan ser únicos y pueden enumerarse en un orden arbitrario.

¿Existen restricciones con la cláusula Values-of que debamos conocer?

Sí, hay algunas cosas que debe saber antes de trabajar con la cláusula de valores de límite en Oracle Database. Estas restricciones son –

  • La colección de indexación debe ser una TABLA ANIDADA o una MATRIZ ASOCIATIVA.
  • Si la colección de indexación es una matriz asociativa, debe indexarse ​​por PLS_INTEGER o BINARY_INTEGER.
  • Los elementos de la colección de indexación deben ser PLS_INTEGER o BINARY_INTEGER.

Ejemplo de cláusula Values-of-bound con sentencia FORALL en Oracle Database:

Paso 1:Crear tabla

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Paso 2:escriba un bloque PL/SQL que demuestre cómo usar la cláusula Values-of con la instrucción FORALL en Oracle Database.

SET SERVEROUTPUT ON;
DECLARE
    --Source collection
    TYPE My_NestedTable IS TABLE OF NUMBER;
    source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90);
    
    --Indexing collection
    TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
    index_col My_Array;
BEGIN
    --Initializing indexing collection with the index numbers.
    index_col   (1) :=  3;
    index_col   (5) :=  7;
    index_col   (12):=  8;
    index_col   (28):=  10;
    --FORALL statement 
    FORALL idx IN VALUES OF index_col
        INSERT INTO tut_79 VALUES (source_col (idx));
END;
/

Puede ver la explicación detallada de este código en el video tutorial. Allí he explicado cada línea de este bloque PL/SQL en detalle.

Ese es el tutorial sobre cómo usar la cláusula Values-of-bound con la declaración FORALL en Oracle Database. Espero que lo encuentre útil. Por favor, comparte este blog con tus amigos en sus redes sociales. Suscríbete también a mi canal de YouTube para obtener tutoriales más informativos e interesantes.

Gracias y que tengas un gran día.