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個知識點,是我工做中遇到的問題,總結的經驗。

相關文章
相關標籤/搜索