< Anterior | Siguiente >

Archivo selectItems.egl completado después de la lección 4B

Este código es la versión finalizada del archivo selectItems.egl después de la lección 4B. 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
      printItemRange2(minPrice, maxPrice);
    onException(exception SQLException)
      handleDBException(exception);
    end
  end
  
function printItemRange2(minPrice Price? in, maxPrice Price? in)
  
  selectStatement STRING = "select * from EGL.ITEM where " ::
    "EGL.ITEM.PRICE between ? and ? " ::
    "order by EGL.ITEM.PRICE";
  
  // Preparar la sentencia que debe utilizarse.
  tempItem Item;
  prepare preparedStatement 
    from selectStatement
    for tempItem;
  
  mostExpensiveItem Item;
  get mostExpensiveItem 
    into mostExpensiveItem.Price
    with
    #sql{
      select
        max(EGL.ITEM.PRICE)
      from EGL.ITEM
    };
    
  if (minPrice == NULL && maxPrice == NULL)
    // Dos parámetros vacíos;
    open expensiveItems for tempItem with preparedStatement 
      using 0, mostExpensiveItem.Price;
  else
  
    if (minPrice != NULL && maxPrice != NULL)
      // Se han especificado ambos parámetros.
      open expensiveItems for tempItem with preparedStatement 
        using minPrice, maxPrice;
    else
      // Sólo se ha especificado un parámetro.
      if (minPrice == NULL)
        // Se ha especificado el máximo.
        open expensiveItems for tempItem with preparedStatement 
          using 0, maxPrice;
      else
        // Se ha especificado el mínimo.
        open expensiveItems for tempItem with preparedStatement 
          using minPrice, mostExpensiveItem.Price;
      end
    end
    
  end
  
  // Visualizar los resultados en la consola.
  forEach (tempItem)
    SysLib.writeStdout(tempItem.Name :: " " ::
      tempItem.Description :: " $" :: tempItem.Price);
  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.
      SysLib.writeStdout("Todos los artículos cuyo precio es 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 4B: Variables de lenguaje principal en sentencias prepare.

< Anterior | Siguiente >

Comentarios