+4 votos
60 visitas

Estou utilizando o BEF 13.1 e preciso utilizar uma StoredProcedure que retorna uma TABLE.

Hoje para executa-la utilizo uma Query, mas preciso fazer o tratamento de qual banco de dados estou utilizando (Oracle/SQL), pois elas são chamadas de forma distintas pelos BD.

Não quero utilizar ela dessa forma, então tentei trata-la como uma StoredProcedure, pensando que ao fazer isso o BEF iria tratar as diferenças do BD automaticamente, então segui os passos descritos no link: http://wiki.benner.com.br/wiki/index.php?title=Projeto_Jacobus_-_Implementa%C3%A7%C3%A3o_I_-_Discuss%C3%A3o_sobre_execu%C3%A7%C3%A3o_de_queries_complexas_e_stored_procedures/Sugest%C3%A3o_de_implementa%C3%A7%C3%A3o#Execu.C3.A7.C3.A3o_de_stored_procedure_com_defini.C3.A7.C3.A3o_de_entidade_criada_programaticamente_e_com_resultset

Mas ao fazer isso tenho o erro: “Additional information: The request for procedure 'procedure' failed because 'procedure' is a table valued function object”.

 

Exemplo da Procedure:

Procedure ExemploRetornavel(
  parametroEntrada01   IN Int
)
Returns Table ExemploRetornavel.type (
  tNome            Varchar(100),
  tDataNascimento  Date,
  tTipoPessoa      Int
);
{...}

Exemplo de SELECT:

SQL: 

SELECT (NOME, DATANASCIMENTO, TIPOPESSOA) FROM ExemploRetornavel(10);

Oracle: 

SELECT (NOME, DATANASCIMENTO, TIPOPESSOA) FROM TABLE(ExemploRetornavel(10));

 

Minha dúvida, tem alguma forma de fazer isso, sem ser verificando qual o tipo de BD estou utilizando?!

por (153 pontos) | 60 visitas

1 Resposta

+3 votos
Melhor resposta

Já utilizamos select em procedures retornáveis usando o QuerySource:

 

Criteria parms = new Criteria();
parms.Parameters.Add(new Parameter("PROCMONITORAMENTO", DataType.Integer, handleProcedimento));

string query = @"SELECT THANDLE          HANDLE,
                               TCODIGOTABELA    CODIGOTABELACODIGO,
                               TPROCEDIMENTO    PROCEDIMENTOCODIGO,
                               TQUANTIDADE      QUANTIDADE
                         FROM @EXEC_FUNCTION(BS_F436BE3F(:PROCMONITORAMENTO))";

EntityDefinition definition = EntityDefinition.Create();
definition.EntitySource = new QuerySource(AppContext.Administration.DefaultSystemInstanceName, query);

 

por (196 pontos)
selecionada por
Melhores Apr 2026
  1. CeceliaWysel

    5 Pontos

  2. VernonSchaw

    5 Pontos

  3. MargieOsterh

    5 Pontos

200 pontos
Melhores 2026 Apr 06 - 12
  1. danilo.pereira

    96 Pontos

  2. danilo.pereira

    96 Pontos

  3. danilo.pereira

    96 Pontos

  4. willian.metalsystem

    69 Pontos

  5. henrique.muller

    62 Pontos

  6. luciano.fronza

    61 Pontos

  7. luciano.fronza

    61 Pontos

  8. luciano.fronza

    61 Pontos

  9. diuari.molinari

    52 Pontos

  10. diuari.molinari

    51 Pontos

518 perguntas
567 respostas
389 comentários
772 usuários