表达式的类型错误PIPELINED FUNCTION

时间:2018-08-26 19:57:16

标签: oracle

大家下午好。 我遇到以下问题,我正在将查询加载到游标“ 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;

以下是错误,当查询PIPELINE函数作为参数发送我的列表时,出现错误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   文字:FROM表(USRAXVM00.PO_POL_REN_VIG_ANT.F_Obtener_Datos(p_Listar => p_Datos))t   错误:PL / SQL:ORA-00904:“ USRAXVM00”。“ PO_POL_REN_VIG_ANT”。“ F_OBTENER_DATOS”:无效的标识符   线:203   文字:FROM表(USRAXVM00.PO_POL_REN_VIG_ANT.F_Obtener_Datos(p_Listar => p_Datos))t   错误:PL / SQL:SQL语句被忽略   线:201   文字:SELECT COUNT(DISTINCT t.VIGENCIA)

非常感谢大家,希望您能帮助我。

0 个答案:

没有答案