Descrição:
Classe derivada da FWPreparedStatement e que encapsula a classe FwExecCachedQuery.
Ela possui todos os métodos da FWPreparedStatement (FWPreparedStatement) e utiliza os conceitos do cache de queries(FWExecCachedQuery)
É utilizada para fazer cache ou não das queries executadas e realiza o bind de queries diretamente no banco de dados, o que torna o plano de execução das queries melhor aproveitado, gerando ganho de performance.
Importante
Classe disponível a partir da lib label 20211116
A query e o bind de valores é feito com base na função TCGenQry2, portanto as regras e limitações estão alinhadas com o uso da TCGenQry2 e devem ser respeitadas para evitar problemas e exceções diversas. Consulte a documentação para maiores detalhes aqui.
Métodos:
New()
Sintaxe:
FWExecStatement():New( cQuery ) ->
Descrição:
Construtor da carga
Parâmetros:
| Nome | Tipo | Descrição |
|---|---|---|
| cQuery | Caracter | Query a ser executada com parâmetros para bind |
OpenAlias()
Sintaxe:
FWExecStatement():OpenAlias( cAlias , cLifeTime, cTimeout) -> cAlias
Descrição:
Executa a query e retorna o alias criado
Parâmetros:
| Nome | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| cAlias | Character | Alias a ser criado | Não. |
| cLifetime | Character | Define se a query vai ficar no cache da dbapi e qual o tempo de vida dela. | Não. Mas caso o parâmetro cTimeout seja enviado sim |
| cTimeOut | Character | Define se a query vai ficar no cache da dbapi e qual o tempo de timeout dela | Não. Mas caso o parâmetro cLifetime seja enviado, sim |
Retorno:
cAlias → character, Alias que a query foi aberta
ExecScalar()
Sintaxe:
FWExecStatement():ExecScalar( cColumn, cLifeTime, cTimeout) -> xValue
Descrição:
Executa a query scalar (que retorna uma coluna) e retorna seu valor. Ela tem o mesmo comportamento da função MPSysExecScalar
Parâmetros:
| Nome | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| cColumn | Character | Nome da coluna a ser retornada da query | Sim. |
| cLifetime | Character | Define se a query vai ficar no cache da dbapi e qual o tempo de vida dela. | Não. Mas caso o parâmetro cTimeout seja enviado sim |
| cTimeOut | Character | Define se a query vai ficar no cache da dbapi e qual o tempo de timeout dela | Não. Mas caso o parâmetro cLifetime seja enviado, sim |
Retorno:
xValue → variant, valor recuperado do banco de dados, com base na query e campos informados
Exemplo de Uso da Classe
#include 'protheus.ch'
user function myExec()
local cQuery as character
local cAlias as character
local oExec as object
cQuery := "SELECT ? FROM " + RetSqlName("SE1") + " WHERE E1_FABOV = ? AND D_E_L_E_T_ = ?"
cQuery := ChangeQuery(cQuery)
oExec := FwExecStatement():New(cQuery)
oExec:SetUnsafe(1,'E1_NUM')
oExec:SetNumeric(2,0)
oExec:SetString(3,' ')
cAlias := oExec:OpenAlias()
//Também existe o método ExecScalar para esta classe, que se comporta bem parecido com a
//função FwExecScalar
//cQuery := "SELECT COUNT(*) CNT FROM " + RetSqlName("SE1") + " WHERE E1_FABOV = ? AND D_E_L_E_T_ = ?"
//...........................
//oExec:ExecScalar('CNT')
(cAlias)→(DbCloseArea())
oExec:Destroy()
oExec := nil
return