CREATE OR REPLACE FUNCTION get_region_path(paramId TEXT) RETURNS TEXT AS $$ BEGIN RETURN ( WITH RECURSIVE path_cte AS ( SELECT id_, parent_id_, name_, CAST(id_ AS TEXT) AS path FROM t_pf_region_1 WHERE id_ = paramId UNION ALL SELECT t.id_, t.parent_id_, t.name_, CONCAT( t.id_,'.',cte.path) FROM t_pf_region_1 t JOIN path_cte cte ON t.id_ = cte.parent_id_ ) SELECT CONCAT('.',path,'.') path FROM path_cte WHERE parent_id_ IS NULL ); END; $$ LANGUAGE plpgsql; -- 查询查询码 SELECT get_region_path('12015'); CREATE OR REPLACE FUNCTION process_regions() RETURNS VOID AS $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT id_, name_ FROM t_pf_region_1) LOOP -- 在这里处理 r.id_ 和 r.name_ -- RAISE NOTICE '%: %', r.id_, r.name_; UPDATE t_pf_region_1 SET query_code_ = get_region_path(r.id_::text) WHERE id_=r.id_; -- 例如,你可以更新另一个表或执行其他操作 END LOOP; END; $$ LANGUAGE plpgsql; -- 调用函数生成查询码,执行一次即可 SELECT process_regions();
Postgresql 根据表中的id,parentId,生成queryCode 查询码(即查询路径,如:.510000.513300.513335.12015.)
于 2024-06-06 22:57:41 首次发布