大家下午好。 我遇到以下问题,我正在将查询加载到游标“ 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)
非常感谢大家,希望您能帮助我。