|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
Executando procedure no ADVPL |
|
Versão: |
11.8 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
LEANDROTTO
em 28/06/2017, 12:33 h
Local: MG Registro: 05/01/2012 Postagens: 20 |
Pessoal, eu tenho uma consulta em uma stored procedure criada direta no sql server. Eu gostaria que todo o retorno dessa stored procedure fosse me passada para trabalhar com os dados, parecido quando passo uma query no dbusearea (dbUseArea(.T.,"TOPCONN",TcGenQry(,,_cQry),"GE",.F.,.T.))
Tentei utilizando a seguinte sintaxe de execução da stored procedure no Protheus
User Function teste()
Local aResult := {}
aResult := TCSPEXEC("USRTESTE", 100)
IF empty(aResult)
Conout(‘Erro na execução da Stored Procedure : ‘+TcSqlError())
Else
Conout("Retorno String : "+aResult[1])
Conout("Retorno Numerico : "+str(aResult[2]))
MsgInfo("Procedure Executada")
Endif
Return
só que o resultado que traz no array não é todos os dados da consulta, traz apenas 1
Por questão de performance eu gostaria de usar a stored procedure, uma vez que a function não me traz todo o beneficio de performance.
Leandro Terra T. de Oliveira
Analista de Sistema
leandroterratelles@terra.com.br
On Line Shopping Ltda. |
|
|
Mensagem do
WSOARES
em 28/06/2017, 13:11 h
Local: CE Registro: 13/07/2007 Postagens: 39 |
Leandro,
Se a sua procedure retornar os dados como tabela, usa a sintaxe abaixo que funciona perfeitamente, eu uso aqui em alguns processos:
cQry := "Exec dbo.pr_relprodmens ‘" +cFilIni+ "‘, ‘" + cFilFim + "‘, ‘" + dtos(dDtIni) + "‘, ‘"+dtos(dDtFim)+"‘,‘R‘, ‘PAR‘ "
DbUseArea(.T., "TOPCONN", TcGenQry(,, cQry), cAliasTrb, .F., .T.)
dbSelectArea(cAliasTrb)
dbGoTop()
E o AliasTrb vai ficar sendo sua area de trabalho com o retorno da procedure.
Wagner Soares |
|
|
Mensagem do
LEANDROTTO
em 28/06/2017, 14:03 h
Local: MG Registro: 05/01/2012 Postagens: 20 |
Quando eu executo a query dessa maneira que passou
"cQry := "Exec dbo.pr_relprodmens '" +cFilIni+ "', '" + cFilFim + "', '" + dtos(dDtIni) + "', '"+dtos(dDtFim)+"','R', 'PAR' "
DbUseArea(.T., "TOPCONN", TcGenQry(,, cQry), cAliasTrb, .F., .T.)"
chega até o banco de dados, consigo acompanhar pela exec sp_WhoIsActive no sql server, mas não retornar, fica com status Runnable
"esse estado quer dizer que a sessão já foi atribuída para um worker thread do processador, mas não está conseguindo enviar para o CPU executar. Caso esteja ocorrendo esse evento com muita frequência e por muito tempo no seu ambiente, pode significar que você precisa de aumentar o processador do seu servidor ou diminuir o paralelismo das queries em execução (leia-se MAXDOP), que podem estar ocupando todos os núcleos."
A questão é, quando rodo a stored procedure pelo banco ao invés do dev, a consulta retorna muito, muito rápido...
Não sei o que fazer... >‘(
att,
Leandro Terra T. de Oliveira
Analista de Sistema
leandroterratelles@terra.com.br
On Line Shopping Ltda. |
|
|
Mensagem do
WSOARES
em 28/06/2017, 14:42 h
Local: CE Registro: 13/07/2007 Postagens: 39 |
Leandro,
Eu também estou tendo esse problema, já teve vezes de a procedure demorar mais 2 horas pra rodar pelo smartclient, e no banco demora uns 10 minutos no máximo quando rodo um período grande.
No meu caso eu consegui resolver otimizando a procedure, roda o plano de execução do sql e tenta verificar como está a performance.
Wagner Soares |
|
|
Mensagem do
LEANDROTTO
em 28/06/2017, 15:25 h
Local: MG Registro: 05/01/2012 Postagens: 20 |
Resolvido, era um índice non-clauter na SA1 necessário, olha, se não fosse a ferramenta de Execution Plan do SSMS, nunca saberia disso, uma vez que no where da minha consulta todos os campos tinham índice!!!
Feito isso, funcionou perfeitamente a execução da procedure, function, pelo dev studio!
"cQry := "Exec dbo.pr_relprodmens ‘" +cFilIni+ "‘, ‘" + cFilFim + "‘, ‘" + dtos(dDtIni) + "‘, ‘"+dtos(dDtFim)+"‘,‘R‘, ‘PAR‘ "
DbUseArea(.T., "TOPCONN", TcGenQry(,, cQry), cAliasTrb, .F., .T.)"
obrigado Wagner!
att,
Leandro Terra T. de Oliveira
Analista de Sistema
leandroterratelles@terra.com.br
On Line Shopping Ltda. |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|