Postgresql 从数组中提取字段值引发编译错误
在编译下面的代码时,我遇到了以下错误Postgresql 从数组中提取字段值引发编译错误,postgresql,Postgresql,在编译下面的代码时,我遇到了以下错误 SQL Error [42601]: ERROR: syntax error at or near "." org.postgresql.util.PSQLException: ERROR: syntax error at or near "." 这是因为这个代码 p_csdtl(v_cn).EDT := p_dt; p_csdtl(v_cn).Amnt := p_totalamt; p_csdtl(v_cn).STDT := v_curdtl(i).p
SQL Error [42601]: ERROR: syntax error at or near "."
org.postgresql.util.PSQLException: ERROR: syntax error at or near "."
这是因为这个代码
p_csdtl(v_cn).EDT := p_dt;
p_csdtl(v_cn).Amnt := p_totalamt;
p_csdtl(v_cn).STDT := v_curdtl(i).pdtm;
请帮我解决这个问题
do $$
begin
create type csd_schema.creRec as(
CS_ID numeric,
STDT DATE,
EDT DATE,
Amnt numeric);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
do $$
begin
CREATE DOMAIN csd_schema.creinfo as csd_schema.creRec[];
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
create or replace function crm.amtcalc(
p_dt IN TIMESTAMP(0),
p_pid IN NUMERIC,
p_csdtl out csd_schema.creinfo,
p_totalamt out NUMERIC) RETURNS RECORD AS $body$
DECLARE
v_curdtl crm.curdtl_v;
c_curdt cursor is
select array(select ats.ppdtm,
SUM(atr.amount_mny)
from amtpays ats,
amtdrm atr
where ats.iq_num = atr.iq_num
group by ats.ppdtm);
v_cn INTEGER := 0;
begin
p_totalamt := 0;
v_cn := 1;
p_csdtl(v_cn).EDT := p_dt;
p_csdtl(v_cn).Amnt := p_totalamt;
OPEN c_curdt;
FETCH c_curdt INTO v_curdtl;
CLOSE c_curdt;
if (coalesce(array_length(v_curdtl,1),0) > 0) then
FOR i IN coalesce(array_lower(v_curdtl,1),0) ..coalesce(array_upper(v_curdtl,1),0)
LOOP
p_csdtl(v_cn).CS_ID := p_pid;
p_csdtl(v_cn).STDT := v_curdtl(i).pdtm;
p_csdtl(v_cn).EDT := p_dt;
v_cn := v_cn + 1;
end LOOP;
end if;
end $body$ language plpgsql;
提前感谢。数组元素是用方括号访问的
p\u csdtl[v\u cn]
该函数最好写为返回表(…)
(而不是返回隐藏在OUT参数中的数组)。然后,您还可以删除没有实际用途的其他类型。您可能还可以摆脱游标和循环处理,但函数的实际意图非常模糊,很难判断。但是,如果我没有弄错的话,您的函数只会返回从amtpays ats选择ats.ppdtm,SUM(atr.amount)的结果,然后在ats.iq_num=atr.iq_num组上加入amtdrm atr。我已经删除了运行正常的代码。你能帮我弄一下“OUT”参数吗。