--我们使用如下的函数创建一个视图,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 是没问题的。
--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 是没问题的。