none
Mapear SP de ORACLE que me retorna un cursor RRS feed

  • Pregunta

  • Hola a todos, por favor necesito su ayuda para terminar de armar una arquitectura. Lo que quiero hacer es lo siguiente:

    Crear al SP de ORACLE los CRUD, todo esta facil, el principal problema que tengo es que para los select hago algo como:

    CREATE OR REPLACE PROCEDURE BI.P_CAMARAS_ARQ
    (
        I_COD_EMPRESA   IN  VARCHAR2,
        I_NUM_CUENTA    IN  NUMBER,
        O_SALDOS        OUT SYS_REFCURSOR
    )
    IS
    BEGIN
        OPEN O_SALDOS FOR
        select cod_camara COD_CAMARA, descripcion DESCRIPCION from BI.ACH_CAMARA;
    END P_CAMARAS_ARQ;
    


    Y a la hora de importar la función desde EF no me aparece el generar tipo complejo

    Bueno entiendo que por ser un cursor el dato de resultado, debe definir unas lineas en el APP.config, indicando ciertos parametros, yo lo hice asi:

      <oracle.dataaccess.client>
        <settings>
          <add name="BI.P_CAMARAS_ARQ.RefCursor.O_SALDOS" value="implicitRefCursor bindinfo='mode=Output'" />
          <add name="BI.P_CAMARAS_ARQ.RefCursorMetaData.O_SALDOS.Column.0" value="implicitRefCursor metadata='ColumnName=cod_camara;BaseColumnName=cod_camara;BaseSchemaName=BI;BaseTableName=ACH_CAMARA;NATIVEDATATYPE=Number;ProviderType=Number'" />
          <add name="BI.P_CAMARAS_ARQ.RefCursorMetaData.O_SALDOS.Column.1" value="implicitRefCursor metadata='ColumnName=descripcion;BaseColumnName=descripcion;BaseSchemaName=BI;BaseTableName=ACH_CAMARA;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
        </settings>
      </oracle.dataaccess.client>

    Pero de todas maneras no me permite generar el tipo complejo en base a las columnas del cursor.

    Alguien sabe que mas tengo que hacer, ya estoy 2 dias sufriendo con este tema.

    Nota. Utilizo VS2015, EF 6, Oracle 10g, EDMX.

    Saludos y gracias de antemano.


    Roy Sillerico

    miércoles, 16 de marzo de 2016 21:00

Todas las respuestas

  • Deberias validar este articulo

    Entity Framework, LINQ and Model-First for the Oracle Database

    Alli se menciona

    Note: If these stored procedures do not appear, make sure that you added them earlier in the OBE - INCREASE_SALARY_BY_10, UPDATE_AND_RETURN_SALARY and OUTPARAM in the HR schema under Procedures

    Valida que hayas agregado el OUTPARAM seguramente en tu caso se llame O_SALDOS


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 17 de marzo de 2016 3:06
  • Gracias por la respuesta Leandro. Pero aun tengo el mismo inconveninete, en lo que me dices es que agregue el OUTPARAM que en mi caso es O_SALDOS, pero:

    > En el ejemplo del enlace el OUTPARAM es un SP de la base de datos.

    > En mi ejemplo, el O_SALDOS es el nombre del cursor de salida del SP de la BD.

    Bueno el SP logro importarlo con normalidad desde el EF, pero al momento de importar la función y obtener columnas para generar un tipo complejo, me aparece "la funcion o procedimiento almacenado no devuelve columnas" como la primera imagen de la pregunta.

    Nota. desde mi explorador de servidor cuando ingreso a la BD, SP, parametros se puede visualizar el parametro de salida:

    Por favor te agradeceria mucho que me sigas colaborandoe en este caso ya que llevo 2 dias y mas desperidicados por trancarme aqui.

    Tal vez un dato importante es que es Oracle 10g, y por ser antiguo no se pueda mapear el cursor que retorna.

    Saludos


    Roy Sillerico

    jueves, 17 de marzo de 2016 14:59
  • Holas? alguien por ahi alguna ayuda? Leandro tu que lo sabes todo hechame una mano.

    Roy Sillerico

    jueves, 17 de marzo de 2016 18:37
  • Gracias Leandro, dare una revisada a los enlaces que madnaste, pero bueno despues de tanto sufrir encontre la solucion aqui:

    http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/EntityFrameworkOBE_2/EntityFrameworkOBE.html

    Bueno al parecer en vs 2013 o superior es mas facil configurar el app.config, te recomiendo que lo leas que esta re bueno el artículo.

    Roy Sillerico

    miércoles, 23 de marzo de 2016 19:30