有30个没有

解决方案 »

  1.   

    --我们使用如下的函数创建一个视图,union all的个数用v_ct控制.--创建测试函数
    --v_ct:union all的个数 v_name:union表的名称CREATE OR REPLACE FUNCTION proc_test(v_ct int,v_name varchar(200))
      RETURNS integer AS
    $BODY$

    declare
    v_view_name varchar(200);
    v_exec_sql  text;
    begin
    --视图名称
    v_view_name ='v_'||v_name||'';

    --创建试图的语句
    v_exec_sql ='create view '||v_view_name||' as '; --循环拼凑字符串
    for v_i in 1..v_ct
    loop
    v_exec_sql =v_exec_sql || 'select * from '||v_name||' union all ';
    end loop; v_exec_sql = substr(v_exec_sql,1,length(v_exec_sql)-10); execute(v_exec_sql);

    --raise notice '%',v_exec_sql; return 0;end;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION proc_test(v_ct int,v_name varchar(200)) OWNER TO pgsql;
    --创建视图select proc_test(10000,'test');--结论:视图创建成功。select count(*) from v_test;因此说10000个union 是没问题的。