Saltar al contenido

Transferir registros en tablas relacionadas mediante el procedimiento almacenado

En la última parte del tutorial, Mover datos de forma selectiva entre tablas en memoria y tablas extendidas, creamos una transacción manual queINSERT“Y”DELETE“Declaraciones como una operación atómica para transferir los datos entre una memoria y una tabla extendida. Ahora vamos a ir un paso más allá y usaremos un procedimiento almacenado para ejecutar las declaraciones requeridas para transferir datos para 2 tablas relacionadas como una sola transacción. un procedimiento almacenado simplifica el proceso de transferencia de datos y también asegura que todo el proceso de migración para el envío y eliminación se lleve a cabo de manera consistente.

Ahora creará un procedimiento almacenado para transferir datos de más de un año, desde las tablas de memoria a las tablas de la capa dinámica. El es Migrate_Aged_Orders() el procedimiento almacenado transfiere datos históricos de la memoria ORDERS_CS y LINEITEM_CS tablas a las tablas de la capa dinámica ORDERS_DT y LINEITEM_DT respectivamente. Copie y pegue el siguiente script en una consola SQL. Luego presione el botón Ejecutar para crear el procedimiento y verificar su correcta ejecución.

CREATE PROCEDURE "TPCH"."Migrate_Aged_Orders" () AS
BEGIN

DECLARE varAgedDate DATE := ADD_YEARS(CURRENT_DATE, -1);

INSERT INTO "TPCH"."ORDERS_DT"
    ( SELECT * FROM "TPCH"."ORDERS_CS"
    WHERE "TPCH"."ORDERS_CS"."O_ORDERDATE" < :varAgedDate );

INSERT INTO "TPCH"."LINEITEM_DT"
    SELECT "LINEITEM_CS".* FROM "TPCH"."LINEITEM_CS", "TPCH"."ORDERS_CS"
    WHERE "TPCH"."ORDERS_CS"."O_ORDERDATE" < :varAgedDate
    AND "LINEITEM_CS"."L_ORDERKEY" = "TPCH"."ORDERS_CS"."O_ORDERKEY";

DELETE FROM "TPCH"."LINEITEM_CS"
    WHERE "TPCH"."LINEITEM_CS"."L_ORDERKEY" IN
      ( SELECT "TPCH"."LINEITEM_CS"."L_ORDERKEY" FROM "TPCH"."LINEITEM_CS", "TPCH"."ORDERS_CS"
        WHERE "TPCH"."ORDERS_CS"."O_ORDERDATE" < :varAgedDate
        AND "LINEITEM_CS"."L_ORDERKEY" = "TPCH"."ORDERS_CS"."O_ORDERKEY" );

DELETE FROM "TPCH"."ORDERS_CS"
    WHERE "TPCH"."ORDERS_CS"."O_ORDERDATE" < :varAgedDate;

END;

La declaracion “varAgedDate”Asegura desde el principio que todas las declaraciones de modificación de datos se refieren al mismo valor de fecha y no cambian al ejecutar el procedimiento almacenado. De lo contrario, la ejecución durante la medianoche puede producir resultados inesperados.
El es INSERT y DELETE Las declaraciones se ejecutan en un orden específico para cumplir con la principal relación externa declarada entre la memoria ORDERS_CS y LINEITEM_CS mesas.

Crear éxito

Hecho

Inicie sesión para responder la pregunta