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

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;

(说明:此压缩包内有本人的实验报告和实验程序,还附赠了自己在网上下载的一份资料和程序!绝对超值!本人此报告成绩优秀,参考绝对不让你后悔) 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 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输入非法的逻辑地址 八 自我评价与总结 九 致谢 十 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值