A linguagem SQL têm regras bastante restritivas sobre a combinação de dados de diferentes tipos nas expressões. Geralmente, o SMBD (DBMS) é encarregado da conversão automática. No entanto, o padrão SQL requer que o SMDB gere um erro caso se tentar comparar números com cadeias de caracteres. Neste contexto, a expressão CAST é muito importante, especialmente quando utiliza SQL dentro de uma linguagem de programação cujos tipos de dados não coincidem com os tipos suportados pelo padrão SQL. Você vai encontrar a continuação a pesquisa da seção modificada ligeiramente para poder utilizar a expressão CAST.
- 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
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
ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
- Utilizando o 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)
ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
- Utilizando o 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
ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
Para provar todos os exemplos anteriores, lance a base "4D SQL Code Samples" e vá até a janela principal. Depois escolha o modo de consulta e pressione o botão Using CAST.