En la lección anterior, puede que haya observado que la sentencia delete incluía la palabra clave noCursor. Aunque la sentencia get selecciona una o varias filas de toda una tabla, la sentencia delete opera normalmente sobre una fila indicada por un cursor creado por una sentencia anterior. La palabra clave noCursor indica que no existe ningún cursor de ese tipo y que la sentencia debe utilizar una cláusula WHERE para identificar la fila del mismo modo que la sentencia get predeterminada.
La sentencia EGL open crea un cursor e indica un conjunto de resultados, o un conjunto de resultados de una o varias filas que el cursor puede recorrer. En lugar de acceder al cursor directamente, se utilizan otras sentencias EGL para recuperar la próxima fila del conjunto de resultados según lo indicado por el cursor, o para realizar operaciones en todo el conjunto de resultados utilizando el cursor para recorrer las filas una por una.
tempItem Item; open allExpensiveItems for tempItem;En este ejemplo, tempItem es una única variable de registro del componente SQLRecord que representa la tabla ITEMS de la base de datos. El código for tempItem especifica que EGL utilizará el cursor para mover filas a este registro una por una. El código open allExpensiveItems da un nombre al conjunto de resultados; en términos estrictos, allExpensiveItems es un identificador, no una variable.
tempItem Item;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.ITEM_ID >= :tempItem.ItemId
order by
EGL.ITEM.ITEM_ID asc
};
Esta cláusula WHERE predeterminada especifica sólo que cada
artículo debe tener un valor ITEM_ID superior al anterior. (EGL gestiona las sentencias SQL
DECLARE CURSOR y OPEN CURSOR y no las muestra en el SQL explícito). tempItem Item;
minCost Price = 500;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.PRICE >= :minCost
order by
EGL.ITEM.ITEM_ID asc
};
Ahora, el conjunto de resultados expensiveItems contiene todas las filas
de la base de datos cuya columna PRICE es igual o superior a la variable
minCost, que está establecida en 500.tempItem Item;
minCost Price = 500;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.PRICE >= :minCost
order by
EGL.ITEM.ITEM_ID asc
};
foreach (tempItem)
SysLib.writeStdout(tempItem.Name :: " " ::
tempItem.Description :: " $" :: tempItem.Price);
end
tempItem Item;
minCost Price = 500;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.PRICE >= :minCost
order by
EGL.ITEM.ITEM_ID asc
};
// Recuperar la primera fila.
get next tempItem;
// Siempre que haya más filas,
// mover la fila siguiente a la variable temporal
// y mostrar sus valores.
while (sysvar.sqlData.sqlcode == 0)
SysLib.writeStdout(tempItem.Name :: " " ::
tempItem.Description :: " $" :: tempItem.Price);
get next tempItem;
end
La sentencia get realiza otras diversas
operaciones que puede utilizar con un cursor abierto y un conjunto de resultados: open expensiveItems scroll for tempItem;
close expensiveItems;Una vez cerrados el cursor y el conjunto de resultados, get next y otras sentencias que dependen del cursor dejan de funcionar.
Laptop PC Great little machine. Take it anywhere with you. $1111.11 Combination Safe Keep your valuables safe and secure. Put 'em in here. $222.22 Desktop PC Lots'a power, at the right price. Includes monitor. $888.55
Este es el código completo del archivo selectItems.egl. Si ve errores marcados con símbolos X rojos en el archivo, asegúrese de que el código coincide con el código de este archivo: Archivo selectItems.egl completado después de la lección 3.