知识点分享前,先附上代码。
CREATE OR REPLACE FUNCTION os_tables_init()
RETURNS int AS
$$
DECLARE
count int;
tbname text;
lans text[];
lan text;
codes text[];
suffix text;
BEGIN
count := 0;
codes := array['0_9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
lans := array['en', 'fr'];
-- 创建 表
FOREACH lan IN ARRAY lans LOOP
FOREACH suffix IN ARRAY codes LOOP
tbname := 'os_' || lan || '_' || suffix;
IF NOT EXISTS(SELECT tablename FROM pg_tables WHERE
schemaname = 'cat_fish' AND tablename = tbname) THEN
RAISE NOTICE 'tb is %', tbname;
EXECUTE 'CREATE TABLE cat_fish.' || tbname || '
(
LIKE cat_fish.os_template INCLUDING ALL
)
WITHOUT OIDS ;';
count := count + 1;
END IF;
END LOOP;
END LOOP;
RETURN count;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
这个例子用到的知识点:
数组的声明, 定义
DECLARE => lans text[];
lans := ['en', 'fr'];
数组循环
FOREACH lan IN ARRAY lans LOOP
*****
END LOOP;
3. sql 语句的执行,如果存在变量赋值,需要使用关键字EXECUTE执行。
4. IF 条件判断
IF ** THEN
END IF;
上面4个知识点,是我工作中遇到的问题,总结的经验。