4D v16

Utilizar la función CAST

Inicio

 
4D v16
Utilizar la función CAST

Utilizar la función CAST  


 

 

El lenguaje SQL tiene reglas bastante restrictivas sobre la combinación de datos de diferentes tipos en las expresiones. Por lo general, el SMBD (DBMS) se encarga de la conversión automática. Sin embargo, el estándar SQL requiere que el SMDB genere un error si se intenta comparar números con cadenas de caracteres. En este contexto, la expresión CAST es muy importante, especialmente cuando utiliza SQL dentro de un lenguaje de programación cuyos tipos de datos no coinciden con los tipos soportados por el estándar SQL. Encontrará a continuación la búsqueda de la sección modificada ligeramente para poder utilizar la expresión CAST.

  • El código 4D inicial sería:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     
     REDUCE SELECTION([MOVIES];0)
     $MovieYear:=Num("1960")
     QUERY([MOVIES];[MOVIES]Year_of_Movie>=$MovieYear)
     SELECTION TO ARRAY([MOVIES]Year_of_Movie;aMovieYear;[MOVIES]Title;aTitles;[MOVIES]Director;aDirectors;
     [MOVIES]Media;aMedias;[MOVIES]Sold_Tickets;aSoldTickets)
      ` Inicializa el resto de las columnas del list box para mostrar la información
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • Utilizando código SQL:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     
     Begin SQL
        SELECT Year_of_Movie, Title, Director, Media, Sold_Tickets
        FROM MOVIES
        WHERE Year_of_Movie >= CAST('1960' AS INT)
        INTO :aMovieYear, :aTitles, :aDirectors, :aMedias, :aSoldTickets;
     End SQL
      `Inicializa el resto de las columnas del list box para mostrar la información
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • Utilizando comandos SQL genéricos:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_TEXT($tQueryTxt)
     
     REDUCE SELECTION([MOVIES];0)
     SQL LOGIN(SQL_INTERNAL;"";"")
     $tQueryTxt:=""
     $tQueryTxt:=$tQueryTxt+"SELECT Year_of_Movie, Title, Director, Media, Sold_Tickets"
     $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
     $tQueryTxt:=$tQueryTxt+" WHERE Year_of_Movie >= CAST('1960' AS INT)"
     SQL EXECUTE($tQueryTxt;aMovieYear;aTitles;aDirectors;aMedias;aSoldTickets)
     SQL LOAD RECORD(SQL all records)
     SQL LOGOUT
      ` Inicializa el resto de las columnas del list box para mostrar la información
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • Utilizando el comando QUERY BY SQL:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     
     REDUCE SELECTION([MOVIES];0)
     QUERY BY SQL([MOVIES];"Year_of_Movie >= CAST('1960' AS INT)")
     SELECTION TO ARRAY([MOVIES]Year_of_Movie;aMovieYear;[MOVIES]Title;aTitles;[MOVIES]Director;aDirectors;
     [MOVIES]Media;aMedias;[MOVIES]Sold_Tickets;aSoldTickets)
      ` Inicializa el resto de las columnas del list box para mostrar la información
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • Utilizando el comando SQL EXECUTE IMMEDIATE:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_TEXT($tQueryTxt)
     
     REDUCE SELECTION([MOVIES];0)
     $tQueryTxt:=""
     $tQueryTxt:=$tQueryTxt+"SELECT Year_of_Movie, Title, Director, Media, Sold_Tickets"
     $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
     $tQueryTxt:=$tQueryTxt+" WHERE Year_of_Movie >= CAST('1960' AS INT)"
     $tQueryTxt:=$tQueryTxt+" INTO :aMovieYear, :aTitles, :aDirectors, :aMedias, :aSoldTickets;"
     Begin SQL
        EXECUTE IMMEDIATE :$tQueryTxt;
     End SQL
      ` Inicializa el resto de las columnas del list box para mostrar la información
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))

Para probar todos los ejemplos anteriores, lance la base "4D SQL Code Samples" y vaya a la ventana principal. Luego elija el modo de consulta y presione el botón Using CAST.

 
PROPIEDADES 

Producto: 4D
Tema: Tutorial

 
HISTORIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)