动态使用存储过程给分区表建立分区

CREATE OR REPLACE Procedure add_partition(v_table_name         in varchar2,
                                          v_tablespace_name_in in varchar2,
                                          v_begin_date         in varchar2,
                                          v_end_date           in varchar2) is
 
  -- Local variables here
  i integer;

  ---分区表信息
  cursor cur_utp(v_table_name in user_tab_partitions.table_name%TYPE) is
    select *
      from (select utp.table_name,
                   utp.tablespace_name,
                   utp.partition_name,
                   utp.high_value,
                   utp.high_value_length,
                   utp.partition_position
              from user_tab_partitions utp
             where utp.table_name = UPPER(v_table_name)
             order by utp.partition_position desc) utp
     where rownum = 1;

  v_high_value         varchar2(255); --less than value信息
  v_partition_max_date timestamp; ----less than value信息的 timestamp表示形式
  v_sqlexec            VARCHAR2(2000); --DDL语句变量
  v_count              number := 0;
  v_interver           number := 1; --步长间隔 单位(天)
  v_part_name_header   varchar2(20) := 'p';
  v_part_name          varchar2(2000); --分区名
  v_partition_num      number := 0;
  v_tablespace_name    varchar2(200);
  v_end_date_inner     timestamp;
  
begin
  v_interver         := 1 ;
  v_part_name_header := upper(v_part_name_header);

  v_end_date_inner := trunc(to_timestamp(v_end_date,
                                         'syyyy-mm-dd hh24:mi:ss.ff'));
  --取值
  for utp in cur_utp(v_table_name) loop
    v_high_value         := substr(utp.high_value,
                                   11,
                                   10);
    v_partition_max_date := to_timestamp(v_high_value,
                                         'syyyy-mm-dd hh24:mi:ss.ff');
    if (to_timestamp(v_begin_date, 'syyyy-mm-dd hh24:mi:ss.ff') >
       v_partition_max_date) then
      v_partition_max_date := to_timestamp(v_begin_date,
                                           'syyyy-mm-dd hh24:mi:ss.ff');
    end if;
    v_part_name := utp.partition_name;
  
    --如果没有给默认值
    if (v_tablespace_name_in is null) then
      -- v_tablespace_name
      v_tablespace_name := utp.tablespace_name;
    else
      v_tablespace_name := v_tablespace_name_in;
    end if;
  end loop;

  if (v_part_name_header =
     substr(v_part_name, 1, length(v_part_name_header))) then
    v_partition_num := to_number(substr(v_part_name,
                                        length(v_part_name_header) + 1,
                                        length(v_part_name)));
    v_partition_num := to_number(to_char(to_date(v_partition_num,'yyyymmdd')+1,'yyyymmdd'));
  else
    dbms_output.put_line('not expect part_name header user default:' ||
                         v_part_name);
    v_partition_num := 0;
  end if;

                    := 0;
  v_partition_max_date := v_partition_max_date + v_interver;
 
 while v_partition_max_date <= v_end_date_inner loop
    
    v_SqlExec := 'ALTER TABLE ' || v_table_name || ' ADD PARTITION ' ||
                 v_part_name_header || (to_number(to_char(to_date(v_partition_num,'yyyymmdd')+i,'yyyymmdd'))) ||
                 ' values less than(TIMESTAMP''' ||
                 to_char(v_partition_max_date, 'syyyy-mm-dd hh24:mi:ss.ff') ||
                 ''') TABLESPACE ' || v_tablespace_name;
    dbms_output.put_line('创建 表分区' || i || '=' || v_SqlExec);
    --alter table IP_CONNRATE_LIMITEX_LOG add partition part_0002 values less than(TIMESTAMP'2010-08-31 00:00:00.000000') tablespace NASP_IP_LOG_TABLESPACE;
    DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
    v_partition_max_date := v_partition_max_date + v_interver;
                      := i + 1;
  
  end loop;
  
  v_count := v_count + i;
  dbms_output.put_line('add partition count:' || v_count);

end add_partition;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(说明:此压缩包内有本人的实验报告和实验程序,还附赠了自己在网上下载的一份资料和程序!绝对超值!本人此报告成绩优秀,参考绝对不让你后悔) 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1.要求首先采用动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。如果不能计算出相应的物理地址,说明原因。 2.设计报告内容应说明: ⑴ 课程设计目的与功能; ⑵ 需求分析,数据结构或模块说明(功能与框图); ⑶ 源程序的主要部分; ⑷ 测试用例,运行结果与运行情况分析; ⑸ 自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他的其他方法(如果有,简要说明该方法); v)对实验题的评价和改进意见,请你推荐设计题目。 目录 课程设计任务书 一 设计目的 二 问题描述 三 功能描述及分析 四 关键技术与方法 4.1动态分区分配 4.1.1动态分区基本思想 4.1.2分区分配中的数据结构 4.1.3动态分区分配算法 4.1.4内存的回收 4.2动态分区重定位 4.2.1重定位的定义 4.2.2动态重定位的实现 4.2.3动态重定位分区分配算法 4.3内存信息的保护 4.3.1上界/下界寄存器 4.3.2基址/限长寄存器 4.4内存地址转换 4.4.1逻辑地址 4.4.2物理地址 4.4.3地址映射 五 需求分析、数据结构及模块说明 5.1需求分析 5.2数据结构 5.3模块说明 5.4主要算法框图 5.4.1最先适应法设计框图 5.4.2进程的删除与回收框图 5.4.3地址转换程序框图 六 源程序的主要部分(伪代码) 6.1有关内存分配算法 6.2有关内存删除回收函数 6.3有关地址转换函数 七 测试用例、运行结果与运行情况分析 7.2输入报错提醒 7.3初始分配内存 7.4 内存的删除与回收 7.5用最先适应法分配接下来的内存 7.6地址转换 7.6.1输入合法的逻辑地址 7.6.2输入非法的逻辑地址 八 自我评价与总结 九 致谢 十 参考文献
引用\[1\]: MySQL支持多种分区类型,包括RANGE分区、LIST分区、HASH分区和KEY分区。RANGE分区是基于一个给定连续区间的列值,将多行分配给分区。LIST分区类似于RANGE分区,但是是基于列值匹配一个离散值集合中的某个值来进行选择。HASH分区是基于用户定义的达式的返回值来进行选择的分区,该达式使用将要插入到中的这些行的列值进行计算。KEY分区类似于HASH分区,但是只支持计算一列或多列,并且MySQL服务器提供其自身的哈希函数。\[1\] 引用\[2\]: 分区是将物理上截断成多个小块,但在逻辑上仍然是一个整体。分区的好处包括提高数据操作的效率和便于存储管理。当的数据量过大时,分区可以减少对全的操作,提高查询和更新的速度。此外,如果的数据量超过了磁盘的存储容量,可以将数据分配到不同的磁盘上,解决存储空间不足的问题。\[2\] 引用\[3\]: 创建分区存储过程可以通过以下步骤实现: 1. 创建一个存储过程使用CREATE PROCEDURE语句。 2. 在存储过程使用CREATE TABLE语句创建分区,并指定分区类型和分区键。 3. 在存储过程使用ALTER TABLE语句添加分区。 4. 在存储过程使用INSERT INTO语句向分区中插入数据。 5. 调用存储过程来执行创建分区的操作。 需要注意的是,创建分区存储过程需要根据具体的需求和分区类型进行相应的设置和操作。\[3\] #### 引用[.reference_title] - *1* *2* *3* [mysql创建分区详细介绍及示例](https://blog.csdn.net/weixin_44462773/article/details/128013794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值