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




Métodos:


New()

Sintaxe:
FWExecStatement():New( cQuery ) ->

Descrição:
Construtor da carga

Parâmetros:

NomeTipoDescrição
cQueryCaracterQuery 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:

NomeTipoDescriçãoObrigatório
cAliasCaracterAlias a ser criadoNão. 
cLifetimeCaracter

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
cTimeOutCaracterDefine se a query vai ficar no cache da dbapi e qual o tempo de timeout delaNão. Mas caso o parâmetro cLifetime seja enviado, sim


Retorno:
cAlias




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:

NomeTipoDescriçãoObrigatório
cColumnCaracterNome da coluna a ser retornada da querySim. 
cLifetimeCaracter

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
cTimeOutCaracterDefine se a query vai ficar no cache da dbapi e qual o tempo de timeout delaNão. Mas caso o parâmetro cLifetime seja enviado, sim


Retorno:
xValue


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 SE1T10 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 SE1T10 WHERE E1_FABOV = ? AND D_E_L_E_T_ = ?"
//...........................
//oExec:ExecScalar('CNT')

(cAlias)→(DbCloseArea())
oExec:Destroy()
oExec := nil 

Return