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í.
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.
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.
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
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.
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.
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.
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.
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».
Hecho
Inicie sesión para responder la pregunta