个人随笔
目录
PG数据库的一些例子(初始化机构链,存储过程)
2025-08-15 17:48:15

一、初始化机构链

  1. WITH RECURSIVE my_sys_dept AS(
  2. SELECT inst_code,inst_name,parent_inst_code,cast(inst_code AS text) as link_code from sys_dept
  3. where parent_inst_code=''
  4. UNION
  5. select dd.inst_code,
  6. dd.inst_name ,
  7. dd.parent_inst_code,
  8. d.link_code||','||dd.inst_code
  9. from my_sys_dept d INNER JOIN sys_dept dd on d.inst_code=dd.parent_inst_code
  10. )
  11. --select * from my_sys_dept
  12. UPDATE sys_dept t1
  13. SET DESCRIPTION = fp.link_code
  14. FROM my_sys_dept fp
  15. WHERE t1.inst_code = fp.inst_code;

二、创建存储过程

  1. CREATE OR REPLACE PROCEDURE update_rxgs_stat(stat_date VARCHAR(10),days INT)
  2. LANGUAGE plpgsql
  3. AS $$
  4. DECLARE
  5. date_array TEXT[];
  6. i INT;
  7. base_date DATE;
  8. BEGIN
  9. --如果为空,则取days天前的数据进行处理
  10. IF stat_date ='' THEN
  11. --初始化数组
  12. date_array := '{}';
  13. --循环生成日期
  14. FOR i IN 0..days-1 LOOP
  15. --执行统计不包括当天,从N-1开始统计
  16. base_date :=CURRENT_DATE-i-1;
  17. date_array := array_append(date_array,to_char(base_date,'YYYY-MM-DD'));
  18. END LOOP;
  19. ELSE
  20. date_array := ARRAY[stat_date];
  21. END IF;
  22. --这里获取了最终目标要执行的时间日期
  23. FOR i IN 1..array_length(date_array,1) LOOP
  24. --相关操作
  25. END LOOP;
  26. END;
  27. $$;

三、存储过程相关操作

  1. --手动指定某一天的数据重跑
  2. CALL update_rxgs_stat('2025-08-17',0);
  3. --重跑十天前的数据(这个是每天定时执行的)
  4. CALL update_rxgs_stat('',10);
  5. --查看已定义的存储过程
  6. SELECT proname FROM pg_proc WHERE pronamespace = (SELECT oid FROM pg_namespace WHERE nspname='public');
  7. --查看存储过程定义
  8. SELECT pg_get_functiondef(p.oid)
  9. FROM pg_proc p
  10. LEFT JOIN pg_namespace n ON p.pronamespace = n.oid
  11. WHERE p.proname = 'update_rxgs_stat' AND n.nspname = 'public';
  12. --删除存储过程
  13. DROP PROCEDURE IF EXISTS update_rxgs_stat;
 7

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2