Descrição:
Como posso executar uma Stored Procedure no E3, passando dados de entrada e lendo dados de saída?
Solução:
Para isto, siga estes procedimentos:
1. Declare a variável de saída:
DECLARE @saida int
2. Utilize o comando EXEC, passando valor de entrada e informando a saída:
EXEC SP_INSERIR_MONTADOR '<¨%variavel_entrada%>', @saida OUTPUT
3. Crie um alias para o campo de retorno:
SELECT @saida as resultado
Código completo:
DECLARE @saida int
EXEC SP_INSERIR_MONTADOR '<¨%variavel_entrada%>', @saida OUTPUT
SELECT @saida as resultado
NOTA: Caso a stored procedure possua um outro resultado de saída, como um INSERT, por exemplo, o E3 retornará vazio, não informando o valor do dado de saída. Isto ocorre porque o E3 tem acesso somente ao primeiro resultado de uma consulta, e neste caso a consulta retorna o valor do INSERT, que é vazio. Para contornar isto, basta colocar o comando SET NOCOUNT ON antes de executar a stored procedure, e desligá-lo no final. Este comando desliga as mensagens de retorno do banco de dados relativas ao número de registros afetados por comandos INSERT e UPDATE, e desta forma abre caminho para que o E3Query receba o valor de retorno da stored procedure.
Exemplo:
SET NOCOUNT ON
DECLARE @saida int
EXEC SP_INSERIR_MONTADOR '<¨%variavel_entrada%>', @saida OUTPUT
SELECT @saida as resultado
SET NOCOUNT OFF
E como executar tudo isso de dentro de um script?
Sidney,
Sugiro que verifique este artigo, ele contém um script que mostra como enviar um valor de entrada e retornar o valor da consulta realizada pela stored procedure.
Basicamente você deve setar as variáveis via SetVariableValue e para o retorno utilizar GetADORecordset.