在Postgres 9.6中pl / pgSQL函数合并

时间:2017-10-20 15:29:26

标签: postgresql function merge

here's a picture in context 有错误消息

不,没有图片链接。哇,你需要成为一名真正的程序员来解决这个问题。 https://photos.app.goo.gl/ReCF1f7kuxvpm2R03

我必须做一些非常愚蠢的事情。它说我的表是一个未知变量,但表就在那里。是进入错误的数据库还是什么?

CREATE OR REPLACE FUNCTION s_ar_update()
returns void AS $$
BEGIN
    MERGE INTO s_ar_hist h USING s_ar_stage s ON s.cocd = h.cocd and s.documentno = h.documentno and s.itm = hist.itm
    WHEN MATCHED THEN DO NOTHING
    WHEN NOT MATCHED THEN INSERT VALUES (s.cocd, s.account, s.invoice_ref, s.documentno, s.type, s.reference, s.doc_date, s.payt, s.net_due_dt, s.amount_in_dc, s.curr, s.amt_in_loc_cur,s.lcur,s.amt,s.cur,s.pstng_date,s.text,s.pk, s.doucment_header_text,s.rcd,s.clrng_doc,s.clearing,s.itm.s.item,s.year_month,s.accty,s.cc,s.period,s.pmnt_date,.s.eff_ex_rate,s.gl_amount,s.gl)
    WHEN NOT MATCHED THEN DELETE;

    insert s_ar_collisions
    select * from s_ar_stage

END; $$
LANGUAGE plpgsql;

此外,我无法让代码格式化得那么好。在这个文本编辑器中,IT看起来很好我想这是另一个问题

1 个答案:

答案 0 :(得分:0)

t=# do
$$
begin
  anything here into vaname from a;
end;
$$;
ERROR:  "vaname" is not a known variable
LINE 4:   anything here into vaname from a;
                             ^
Time: 0.420 ms`enter code here`

为什么呢?因为我想从最后解析它。并且永远不会访问anything here语句 - 因此您没有看到MERGE异常。 Postgres does not have MERGE command。所以得到INTO并认为你想为变量赋值 - 而不是插入表中。因此你会看到这个例外