выражения неправильного типа - PullRequest
0 голосов
/ 26 августа 2018

Добрый день всем.У меня есть следующая проблема, я загружаю запрос в курсор "c_Pol_Vig_Ant" и после определенных проверок я сохраняю результаты в списке

    TYPE r_Pol_Vig_Ant IS RECORD(
    NUMPOL           USRAXVM00.Vm_Poliza.NUMPOL%TYPE,
    IDEOBSER         USRAXVM00.Vm_Obser_Poliza.IDEOBSER%TYPE,
    NUMAVISO         USRAXVM00.Vm_Obser_Poliza.NUMAVISO%TYPE,
    FECINIVIG        USRAXVM00.Vm_Poliza.FECINIVIG%TYPE,
    FECFINVIG        USRAXVM00.Vm_Poliza.FECFINVIG%TYPE,
    FECVCT           USRAXVM00.VM_GIROS_FINANCIAMIENTO.FECVCT%TYPE,
    ORDEN            USRAXVM00.VM_GIROS_FINANCIAMIENTO.NUMGIRO%TYPE,
    IDGIRO           USRAXVM00.VM_GIROS_FINANCIAMIENTO.IDGIRO%TYPE,
    CODMONEDA        USRAXVM00.VM_ACREENCIA.CODMONEDA%TYPE,
    MTOACREMONEDA    USRAXVM00.VM_ACREENCIA.MTOACREMONEDA%TYPE,
    STSGIRO          USRAXVM00.VM_GIROS_FINANCIAMIENTO.STSGIRO%TYPE,
    CODPROD          USRAXVM00.Vm_Poliza.CODPROD%TYPE,
    PENDIENTE        USRAXVM00.VM_ACREENCIA.MTOACREMONEDA%TYPE,
    TOTAL            USRAXVM00.VM_ACREENCIA.MTOACREMONEDA%TYPE,
    COBRADO          USRAXVM00.VM_ACREENCIA.MTOACREMONEDA%TYPE,
    FECHAEMISAVISO   USRAXVM00.Vm_Obser_Poliza.FECHA%TYPE,
    CODCANAL         USRAXVM00.Vm_Poliza.CODCANAL%TYPE,
    CANAL            USRAXVM00.Vm_Tercero.NOMTER%TYPE,
    CODINTER         USRAXVM00.Vm_Part_Inter_Pol.CODINTER%TYPE,
    AGENTE           USRAXVM00.Vm_Tercero.NOMTER%TYPE,
    CODPLAN          USRAXVM00.Vm_Cond_Financiamiento.CODPLAN%TYPE,
    NOMPLAN          USRAXVM00.VM_PLAN_FINANCIAMIENTO.NOMPLAN%TYPE,
    ORIGEN           VARCHAR2(4),
    VIGENCIA         VARCHAR2(20)
    );

  TYPE tab_Pol_Vig_Ant IS TABLE OF r_Pol_Vig_Ant;
  TYPE tab_Lista IS TABLE OF r_Pol_Vig_Ant INDEX BY BINARY_INTEGER;


FOR x IN c_Pol_Vig_Ant LOOP
  IF x.STSGIRO = 'CAS' OR x.STSGIRO = 'AND' THEN
    v_Valor := USRAXVM00.PO_POL_REN_VIG_ANT.Depurar_And_Cas(x.NUMAVISO, x.IDGIRO, x.ORDEN);
    IF v_Valor <> 1 THEN
      v_Cont := v_Cont + 1;
      p_Datos(v_Cont).NUMPOL := x.NUMPOL;
      p_Datos(v_Cont).IDEOBSER := x.IDEOBSER;
      p_Datos(v_Cont).NUMAVISO := x.NUMAVISO;
      p_Datos(v_Cont).FECINIVIG := x.FECINIVIG;
      p_Datos(v_Cont).FECFINVIG := x.FECFINVIG;
      p_Datos(v_Cont).FECVCT := x.FECVCT;
      p_Datos(v_Cont).ORDEN := x.ORDEN;
      p_Datos(v_Cont).IDGIRO := x.IDGIRO;
      p_Datos(v_Cont).CODMONEDA := x.CODMONEDA;
      p_Datos(v_Cont).MTOACREMONEDA := x.MTOACREMONEDA;
      p_Datos(v_Cont).STSGIRO := x.STSGIRO;
      p_Datos(v_Cont).CODPROD := x.CODPROD;
      p_Datos(v_Cont).PENDIENTE := x.PENDIENTE;
      p_Datos(v_Cont).TOTAL := x.TOTAL;
      p_Datos(v_Cont).COBRADO := x.COBRADO;
      p_Datos(v_Cont).FECHAEMISAVISO := x.FECHAEMISAVISO;
      p_Datos(v_Cont).CODCANAL := x.CODCANAL;
      p_Datos(v_Cont).CANAL := x.CANAL;
      p_Datos(v_Cont).CODINTER := x.CODINTER;
      p_Datos(v_Cont).AGENTE := x.AGENTE;
      p_Datos(v_Cont).CODPLAN := x.CODPLAN;
      p_Datos(v_Cont).NOMPLAN := x.NOMPLAN;
      p_Datos(v_Cont).ORIGEN := x.ORIGEN;
      p_Datos(v_Cont).VIGENCIA := x.VIGENCIA;
    END IF;
  END IF;
END LOOP;

Ошибка заключается в следующем, при выполнении запроса к трубопроводуфункция, отправляющая в качестве параметра мой список, выдает ошибку expressions is of wrong type.

FOR x IN p_Datos.First..p_Datos.Last LOOP

  SELECT COUNT(DISTINCT t.VIGENCIA)
  INTO v_NroVigencias
  FROM table(USRAXVM00.PO_POL_REN_VIG_ANT.F_Obtener_Datos(p_Listar => p_Datos)) t

  WHERE t.NUMPOL = p_Datos(x).NUMPOL;

  IF v_NroVigencias = 1 THEN
    p_Datos.DELETE(x);
  END IF;

END LOOP; 

Это моя функция:

FUNCTION F_Obtener_Datos(p_Listar IN tab_Lista) RETURN tab_Pol_Vig_Ant PIPELINED IS
p_ListaDatos      r_Pol_Vig_Ant;

BEGIN

IF p_Listar.Count > 0 THEN
  FOR x IN p_Listar.First..p_Listar.Last LOOP
    p_ListaDatos.NUMPOL := p_Listar(x).NUMPOL;
    p_ListaDatos.NUMAVISO := p_Listar(x).NUMAVISO;
    p_ListaDatos.FECINIVIG := p_Listar(x).FECINIVIG;
    p_ListaDatos.FECFINVIG := p_Listar(x).FECFINVIG;
    p_ListaDatos.FECVCT := p_Listar(x).FECVCT;
    p_ListaDatos.ORDEN := p_Listar(x).ORDEN;
    p_ListaDatos.IDGIRO := p_Listar(x).IDGIRO;
    p_ListaDatos.CODMONEDA := p_Listar(x).CODMONEDA;
    p_ListaDatos.MTOACREMONEDA := p_Listar(x).MTOACREMONEDA;
    p_ListaDatos.STSGIRO := p_Listar(x).STSGIRO;
    p_ListaDatos.CODPROD := p_Listar(x).CODPROD;
    p_ListaDatos.PENDIENTE := p_Listar(x).PENDIENTE;
    p_ListaDatos.TOTAL := p_Listar(x).TOTAL;
    p_ListaDatos.COBRADO := p_Listar(x).COBRADO;
    p_ListaDatos.FECHAEMISAVISO := p_Listar(x).FECHAEMISAVISO;
    p_ListaDatos.CANAL := p_Listar(x).CANAL;
    p_ListaDatos.CODINTER := p_Listar(x).CODINTER;
    p_ListaDatos.AGENTE := p_Listar(x).AGENTE;
    p_ListaDatos.CODPLAN := p_Listar(x).CODPLAN;
    p_ListaDatos.NOMPLAN := p_Listar(x).NOMPLAN;
    p_ListaDatos.ORIGEN := p_Listar(x).ORIGEN;
    p_ListaDatos.VIGENCIA := p_Listar(x).VIGENCIA;
    PIPE ROW(p_ListaDatos);
  END LOOP;
END IF;

RETURN;

END F_Obtener_Datos;

Ошибка: PLS-00382: выражение невернотип Строка: 203 Текст: FROM таблица (USRAXVM00.PO_POL_REN_VIG_ANT.F_Obtener_Datos (p_Listar => p_Datos)) t Ошибка: PLS-00306: неверный номер или типы аргументов при вызове строки F_OBTENER_DATOS ': 203 Текст: таблица FROMPO_POL_REN_VIG_ANT.F_Obtener_Datos (p_Listar => p_Datos)) t Ошибка: PL / SQL: ORA-00904: «USRAXVM00». «PO_POL_REN_VIG_ANT».=> p_Datos)) t Ошибка: PL / SQL: оператор SQL игнорируется Строка: 201 Текст: SELECT COUNT (DISTINCT t.VIGENCIA)

Большое спасибо каждомуодин, я надеюсь, вы можете помочь мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...