KingbaseES V8 存储过程动态创建分区表

版本:kingbaseES V8R6  mysql模式

表结构:

-- tr_cle_sys_check_weight_off_site definition

CREATE TABLE tr_cle_sys_check_weight_off_site (
	id varchar(64),
	check_no varchar(64) NOT NULL,
	check_time datetime NOT NULL,
	CONSTRAINT PRIMARY_E8DE7E09 PRIMARY KEY (check_no)
)
PARTITION BY RANGE(check_time);
;

CREATE INDEX check_no_7D2CE502 ON tr_cle_sys_check_weight_off_site (check_no);
CREATE INDEX check_time_3218B19A ON tr_cle_sys_check_weight_off_site (check_time);

存储过程:

CREATE OR REPLACE PROCEDURE tr_cle_sys_check_weight_off_site()
AS $$
DECLARE
    now_time timestamp := NOW();
    tomorrow timestamp := DATE_TRUNC('month', now_time + INTERVAL 1 month)::DATE;
    next_tomorrow timestamp := DATE_TRUNC('month', tomorrow + INTERVAL 1 month)::DATE;
    part_name text := to_char(tomorrow, 'pYYYYMM') ;
    part_value date := (next_tomorrow)::date;
    num integer;
    CreateParSql VARCHAR2(200);

BEGIN
    -- 获取分区数量,判断分区是否存在
    SELECT COUNT(*) INTO num 
    FROM information_schema.partitions
    WHERE  table_name = 'tr_cle_sys_check_weight_off_site'
    AND table_schema = current_schema()
    AND partition_name = part_name;

    IF num = 0 THEN
       RAISE NOTICE 'Partition count: %', num;
       RAISE NOTICE 'para is : %-%-%', part_name,tomorrow,next_tomorrow;
       --根据月份创建分区,如(2024-05-01--2024-06-1)代表5月分区,分区名为:p202405,不包含6月数据。
       CreateParSql := CONCAT('CREATE TABLE tr_cle_sys_check_weight_off_site_',part_name,' partition of tr_cle_sys_check_weight_off_site FOR VALUES FROM (''',tomorrow,''') TO (''',next_tomorrow,''');');
       RAISE NOTICE 'Sql is: %', CreateParSql;
       EXECUTE CreateParSql;

    END IF;
END;
$$ LANGUAGE plpgsql;

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值