Saltar al contenido

Usar operadores de variables de tabla

En este tutorial, ahora actualizará el procedimiento anterior para usar Operadores de cambio de tabla para manipular las variables de tabla existentes. Podemos usar operadores de tabla de variables para realizar operaciones similares a DML en variables de tabla sin tener que invocar la capa SQL. En este ejercicio, probaremos los operadores INSERT, UPDATE, DELETE y SEARCH.


Paso 1: Regrese al procedimiento anterior

Regresar al llamado procedimiento build_products en la carpeta de procedimientos.

Hecho

Inicie sesión para responder la pregunta

Paso 2: eliminar el código anterior

Elimine el código dentro del cuerpo, entre las declaraciones BEGIN y END, dejando solo las dos líneas que se muestran aquí.

bain

Hecho

Inicie sesión para responder la pregunta

Paso 3: Ingrese el código para INSERTAR operador

Utilice el operador INSERT para todas las capas lt_products en el llamado parámetro de salida ex_products. Luego use el operador INSERT para agregar 3 nuevos productos a la tabla de salida. Dado que está especificando el índice real, insertará sus nuevas filas en ese índice y empujará todas las filas existentes.

insertar

Hecho

Inicie sesión para responder la pregunta

Paso 4: revise el código completo

Todo el código debería verse muy similar a esto.

PROCEDURE "build_products" (
	  out ex_products table (PRODUCTID nvarchar(10),
        CATEGORY nvarchar(20),
       PRICE decimal(15,2) ) )
   LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER
   --DEFAULT SCHEMA <default_schema_name>
   READS SQL DATA AS
BEGIN

 declare lt_products table like :ex_products;

 lt_products = select PRODUCTID, CATEGORY, PRICE from "MD.Products";
 :ex_products.INSERT(:lt_products);
 :ex_products.INSERT(('ProductA', 'Software', '1999.99'), 1);
 :ex_products.INSERT(('ProductB', 'Software', '2999.99'), 2);
 :ex_products.INSERT(('ProductC', 'Software', '3999.99'), 3);

END

Hecho

Inicie sesión para responder la pregunta

Paso 5: guarde, cree, ejecute y verifique los resultados

Utilice lo que ha aprendido y guarde su trabajo, desarrolle el módulo. Luego regrese al Explorador de bases de datos y llame al procedimiento. En la pestaña Resultados, debería ver los detalles del producto, incluidos los nuevos productos que ha agregado.

resultados

Hecho

Inicie sesión para responder la pregunta

Paso 6: Ingrese la actualización del código de operador

Regrese al procedimiento y modifíquelo más. Ingrese una declaración de DISEÑO como se muestra. Agregue un bucle FOR a un bucle también
a través de las capas y actualice el precio usando el operador UDPATE

actualizar

Hecho

Inicie sesión para responder la pregunta

Paso 7: revise el código completo

Todo el código debería verse muy similar a esto.

PROCEDURE "build_products" (
	        out ex_products table (PRODUCTID nvarchar(10),
                               CATEGORY nvarchar(20),
                               PRICE decimal(15,2) ) )
   LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER
   READS SQL DATA AS
BEGIN

 declare lt_products table like :ex_products;
 declare lv_index int = 0;

 lt_products = select PRODUCTID, CATEGORY, PRICE from "MD.Products";
 :ex_products.INSERT(:lt_products);
 :ex_products.INSERT(('ProductA', 'Software', '1999.99'), 1);
 :ex_products.INSERT(('ProductB', 'Software', '2999.99'), 2);
 :ex_products.INSERT(('ProductC', 'Software', '3999.99'), 3);

 FOR lv_index IN 1..record_count(:ex_products) DO
   :ex_products.(PRICE).UPDATE((:ex_products.PRICE[lv_index] * 1.25), lv_index);
 END FOR;


END

Hecho

Inicie sesión para responder la pregunta

Paso 8: guarde, cree, ejecute y compruebe los resultados

Utilice lo que ha aprendido y guarde su trabajo, desarrolle el módulo. Luego regrese al Explorador de bases de datos y llame al procedimiento. En la pestaña Resultados, debería ver los detalles del producto, incluidos los nuevos productos que ha introducido y ahora los precios han aumentado.

resultados

Hecho

Inicie sesión para responder la pregunta

Paso 9: Ingrese el código de operador DELETE

Regrese al procedimiento y modifíquelo más. Ingrese declaraciones DEFAULT como se muestra. Agregue un bucle FOR también decida qué líneas eliminar y finalmente use el operador DELETE para eliminar todas las filas a la vez.

eliminado

Hecho

Inicie sesión para responder la pregunta

Paso 10: revise el código completo

Todo el código debería verse muy similar a esto.

PROCEDURE "build_products" (
	        out ex_products table (PRODUCTID nvarchar(10),
                               CATEGORY nvarchar(20),
                               PRICE decimal(15,2) ) )
   LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER
   READS SQL DATA AS
BEGIN

 declare lt_products table like :ex_products;
 declare lv_index int = 0;
 declare lv_del_index int array;
 declare lv_array_index int = 0;

 lt_products = select PRODUCTID, CATEGORY, PRICE from "MD.Products";
 :ex_products.INSERT(:lt_products);
 :ex_products.INSERT(('ProductA', 'Software', '1999.99'), 1);
 :ex_products.INSERT(('ProductB', 'Software', '2999.99'), 2);
 :ex_products.INSERT(('ProductC', 'Software', '3999.99'), 3);

 FOR lv_index IN 1..record_count(:ex_products) DO
   :ex_products.(PRICE).UPDATE((:ex_products.PRICE[lv_index] * 1.25), lv_index);
 END FOR;

 FOR lv_index IN 1..record_count(:ex_products) DO
   IF :ex_products.PRICE[lv_index] <= 2500.00 THEN
    lv_array_index = lv_array_index + 1;
    lv_del_index[lv_array_index] = lv_index;
  END IF;
 END FOR;

 :ex_products.DELETE(:lv_del_index);


END

Hecho

Inicie sesión para responder la pregunta

Paso 11: guarde, cree, ejecute y verifique los resultados

Utilice lo que ha aprendido y guarde su trabajo, desarrolle el módulo. Luego regrese al Explorador de bases de datos y llame al procedimiento. En la pestaña Resultados, debería ver los detalles del producto que quedan después de realizar la operación ELIMINAR.

resultados

Hecho

Inicie sesión para responder la pregunta

Paso 12: Ingrese su código de operador de BÚSQUEDA

Regrese al procedimiento y modifíquelo más. Introduzca un código para un nuevo parámetro de salida. Agregue ambas líneas de código para BUSCAR la variable de la tabla intermedia.

buscar

Hecho

Inicie sesión para responder la pregunta

Paso 13: revise el código completo

Todo el código debería verse muy similar a esto.

PROCEDURE "build_products" (
	        out ex_products table (PRODUCTID nvarchar(10),
                               CATEGORY nvarchar(20),
                               PRICE decimal(15,2) ),
            out ex_pc_productid nvarchar(10) )
   LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER
   READS SQL DATA AS
BEGIN

 declare lt_products table like :ex_products;
 declare lv_index int = 0;
 declare lv_del_index int array;
 declare lv_array_index int = 0;

 lt_products = select PRODUCTID, CATEGORY, PRICE from "MD.Products";
 :ex_products.INSERT(:lt_products);
 :ex_products.INSERT(('ProductA', 'Software', '1999.99'), 1);
 :ex_products.INSERT(('ProductB', 'Software', '2999.99'), 2);
 :ex_products.INSERT(('ProductC', 'Software', '3999.99'), 3);

 FOR lv_index IN 1..record_count(:ex_products) DO
   :ex_products.(PRICE).UPDATE((:ex_products.PRICE[lv_index] * 1.25), lv_index);
 END FOR;

 FOR lv_index IN 1..record_count(:ex_products) DO
   IF :ex_products.PRICE[lv_index] <= 2500.00 THEN
    lv_array_index = lv_array_index + 1;
    lv_del_index[lv_array_index] = lv_index;
  END IF;
 END FOR;

 :ex_products.DELETE(:lv_del_index);

 lv_index = :ex_products.SEARCH("CATEGORY", 'PC', 1);  
 ex_pc_productid = :ex_products.PRODUCTID[lv_index];


END

Hecho

Inicie sesión para responder la pregunta

Paso 14: guarde, cree, ejecute y verifique los resultados

Utilice lo que ha aprendido y guarde su trabajo, desarrolle el módulo. Luego regrese al Explorador de bases de datos y llame al procedimiento. En la pestaña Resultados, debería ver los detalles del producto que quedan después de la operación ELIMINAR en la primera pestaña, y en la segunda pestaña de resultados debería ver la identificación del producto de la primera fila cuya categoría era igual a “PC”.

resultados

Hecho

Inicie sesión para responder la pregunta