postgres存储过程(一)

知识点分享前,先附上代码。sql

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;

这个例子用到的知识点:数组

  1. 数组的声明, 定义code

    DECLARE => lans text[];it

    lans := ['en', 'fr'];table

  2. 数组循环class

    FOREACH lan IN ARRAY lans LOOP变量

        *****
    循环

    END LOOP;经验

3. sql 语句的执行,若是存在变量赋值,须要使用关键字EXECUTE执行。
总结

4. IF 条件判断

    IF ** THEN

    END IF;

上面4个知识点,是我工做中遇到的问题,总结的经验。

相关文章
相关标签/搜索