postgres存储过程(一)

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

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. 数组的声明, 定义

    DECLARE => lans text[];

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

  2. 数组循环

    FOREACH lan IN ARRAY lans LOOP

        *****

    END LOOP;

3. sql 语句的执行,如果存在变量赋值,需要使用关键字EXECUTE执行。

4. IF 条件判断

    IF ** THEN

    END IF;

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

转载于:https://my.oschina.net/meowmeow/blog/193337

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值