返回表和返回表的存储过程从9000表中收集1行

时间:2014-02-02 17:27:19

标签: postgresql stored-procedures plpgsql

我需要一个存储函数,它返回表并返回表从所有9000个表中收集1行。

先决条件:

  1. 有相同的结构9000个表。
  2. 表名是次序的,如X1000 X1001 .... X9999。
  3. 向所有表发出查询,并从所有表中获取1行。
  4. 收集所有行并返回1表。
  5. Envirnment是PostgreSQL 9.3和PL / Pgsql
  6. 我希望你能给我一些简单的例子。

    我想我无法理解如何处理变量值。

    我做了自己,但是没有用。

    create or replace function ListOfInc
    (ddate int) returns table(col1 int, col2 dec) as $$
    declare
    numofrow integer;
    begin
    
    for i in 1000..9999 loop
     numofrow := execute 'select count(*) from x' || i || ';';
     if numofrow > 0 then
        return query execute 'select ' || i || ' Trunc(100 * (CAST(Lag(adjust) over (order by' 
        || %1 || ') as dec) / CAST(adjust as dec) - 1) ,2) from x' || i || ' order by ' || %1  || ' desc limit 1;';
     end if;
    
    end loop;
    
    end;
    
    $$ language plpgsql;
    

1 个答案:

答案 0 :(得分:1)

这是PostgreSQL's inheritance features的理想工作。

如果要避免继承,则需要使用动态SQL构建所有表的union all,或使用RETURN QUERY EXECUTE ...遍历每个表。

我个人建议将所有数据合并到一个表中。创建视图以模拟旧结构,以便您的应用程序不会注意到更改。