+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 Aug 2025
    200 pontos
    Melhores 2025 Jul 28 - Aug 03
    1. Larson

      156 Pontos

    2. danilo.pereira

      96 Pontos

    3. danilo.pereira

      96 Pontos

    4. danilo.pereira

      96 Pontos

    5. luciano.fronza

      61 Pontos

    6. luciano.fronza

      61 Pontos

    7. luciano.fronza

      61 Pontos

    8. diuari.molinari

      52 Pontos

    9. diuari.molinari

      51 Pontos

    10. diuari.molinari

      51 Pontos

    517 perguntas
    566 respostas
    389 comentários
    704 usuários