Postgresql 根据表中的id,parentId,生成queryCode 查询码(即查询路径,如:.510000.513300.513335.12015.)

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();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值