需要使用返回表结果插入表中。我无法仅插入select

问题描述 投票:0回答:1

我无法使用returns表函数中的多个记录并将其插入另一个表中。我可以调用该函数并返回结果,但不能插入。

``
with rst as (select * from audit.audit_tbl_row_count_by_year(sch,tbl,fld) a)
              insert into audit.audit_metric_data(level,value) values(a.yr,a.cnt);
CREATE OR REPLACE FUNCTION audit.audit_tbl_row_count_by_year(sch text, tbl text, fld text)
RETURNS TABLE (
      vyr int,
      vcnt numeric
)
LANGUAGE plpgsql
AS $$
DECLARE 
    qry text;
    var_r record;
    --could not get RETURN QUERY to use parameters
BEGIN
  qry := 'select extract(year from '|| fld ||') as yr, count(*) as cnt from '|| sch ||'.'|| tbl ||' group by 1';
   FOR var_r IN EXECUTE qry
   LOOP
        vyr := var_r.yr ; 
        vcnt := var_r.cnt;
        RETURN NEXT;
   END LOOP;
END$$; 
``

以下代码正在工作

for rec2 in select * from audit.audit_tbl_row_count_by_year(sch,tbl,fld) loop insert into audit.audit_metric_data(metric_id,level,value,run_date) values(rec.metric_id,sch|| '.' ||tbl|| '.'||fld|| '.' ||rec2.vyr,rec2.vcnt,current_date); end loop;

sql function insert plpgsql
1个回答
0
投票

语法为INSERT INTO ... SELECT ...。你离那远了。您可以尝试:

INSERT INTO audit.audit_metric_data
            (level,
             value)
            SELECT vyr,
                   vcnt
                   FROM audit.audit_tbl_row_count_by_year(sch,
                                                          tbl,
                                                          fld);
© www.soinside.com 2019 - 2024. All rights reserved.