Este código es la versión finalizada del archivo selectItems.egl después de la lección 4A. Si ve muchos errores marcados por símbolos X rojos en el archivo, asegúrese de que el código coincida con este código:
Ejemplo
package programs;
import EGLDerbyDB.data.Item;
import EGLDerbyDB.primitivetypes.data.Price;
program selectItems type BasicProgram {}
function main()
minPrice, maxPrice Price?;
minPrice = 50;
maxPrice = 500;
try
printItemRange(minPrice, maxPrice);
onException(exception SQLException)
handleDBException(exception);
end
end
function printItemRange(minPrice Price? in, maxPrice Price? in)
selectStatement STRING = "select * from EGL.ITEM where ";
if (minPrice == NULL && maxPrice == NULL)
// Dos parámetros vacíos;
// devolver todas las filas con PRICE mayor que cero.
selectStatement ::= "EGL.ITEM.PRICE > 0 ";
else
if (minPrice != NULL && maxPrice != NULL)
// Se han especificado ambos parámetros.
selectStatement ::= "EGL.ITEM.PRICE between ":: minPrice :: " and " :: maxPrice :: " ";
else
// Sólo se ha especificado un parámetro.
if (minPrice == NULL)
// Se ha especificado el máximo.
selectStatement ::= "EGL.ITEM.PRICE <= " :: maxPrice :: " ";
else
// Se ha especificado el mínimo.
selectStatement ::= "EGL.ITEM.PRICE >= ":: minPrice :: " ";
end
end
end
// Independientemente de los parámetros, ordenar por precio.
selectStatement ::= "order by EGL.ITEM.PRICE";
// Visualizar código SQL completado.
SysLib.writeStdout("Consulta completada: "::selectStatement);
// Preparar la sentencia que debe utilizarse.
tempItem Item;
prepare preparedStatement
from selectStatement
for tempItem;
// Utilizar la sentencia preparada en lugar de SQL explícito.
open expensiveItems for tempItem with preparedStatement;
// Visualizar los resultados en la consola.
forEach (tempItem)
SysLib.writeStdout(tempItem.Name :: " " ::
tempItem.Description :: " $" :: tempItem.Price);
end
end
function printExpensiveItems(maxPrice Price in)
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.PRICE >= :maxPrice
order by
EGL.ITEM.ITEM_ID asc
};
forEach (tempItem)
SysLib.writeStdout(tempItem.Name :: " " ::
tempItem.Description :: " $" :: tempItem.Price);
end
end
function handleDBException(exception SQLException)
SysLib.writeStdout("Error de acceso a la base de datos."::
"Consulte la sección Resolución de problemas");
SysLib.writeStdout(exception.message);
end
end
Volver a Lección 4A: Utilizar una sentencia preparada.