知識點分享前,先附上代碼。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;
這個例子用到的知識點:數組
數組的聲明, 定義code
DECLARE => lans text[];it
lans := ['en', 'fr'];table
數組循環class
FOREACH lan IN ARRAY lans LOOP變量
*****
循環
END LOOP;經驗
3. sql 語句的執行,若是存在變量賦值,須要使用關鍵字EXECUTE執行。
總結
4. IF 條件判斷
IF ** THEN
END IF;
上面4個知識點,是我工做中遇到的問題,總結的經驗。