传入时间按月分区并创建每月表空间

--1 创建每个索引分区依存的表空间
declare

v_ts        varchar2(40);
  v_indts     varchar2(40);
  v_mxtabts   varchar2(40); --明细数据表空间
  v_mxindts   varchar2(40); --明细索引表空间

t_mon       date; --把传入值 转换为 日期  传入格式:201609
  t_mon1      varchar2(2000);
  t_qssj      date; --把传入起始时间 转换为 日期  格式:201609
  t_zzsj      date; --把传入终止时间 转换为 日期  格式:201609
  c_thismonth char(4); --取出当前月
  c_nextmonth char(4); --取出下个月
  v_sql       varchar2(2000); --要执行的sql语句
  c_str01    varchar2(2000);
  c_str02       varchar2(2000);
 
begin

dbms_output.put_line(‘First is starting‘);

t_qssj := to_date(‘&qssj‘, ‘yyyymm‘); --传入参数  起始时间 01-8 月 -16
  t_zzsj := to_date(‘&zzsj‘, ‘yyyymm‘); --插入参数  终止时间 01-9 月 -16

if to_char(t_qssj, ‘yyyymm‘) <> ‘&qssj‘ --判断传入的  起始时间、终止时间是否合法
     or to_char(t_zzsj, ‘yyyymm‘) <> ‘&zzsj‘ then
    dbms_output.put_line(‘----------------------------------------‘);
    dbms_output.put_line(‘错误: 输入的月份格式必须为‘‘YYYYMM‘‘‘);

end if;

--if t_qssj <= trunc(sysdate,‘mm‘) then
  --    dbms_output.put_line(‘----------------------------------------‘);
  --    dbms_output.put_line(‘错误: 起始月必须大于当前月份‘);
  --    goto endproc;
  --end if;

if ‘&zzsj‘ < ‘&qssj‘ then
    --如果插入的 终止时间 小于 起始时间 ,退出
    dbms_output.put_line(‘----------------------------------------‘);
    dbms_output.put_line(‘错误: 终止月必须大于起始月‘);

end if;

t_mon := to_date(‘&qssj‘, ‘yyyymm‘); --把传入值 转换为 日期  输出格式:01-8月 -16
  dbms_output.put_line(‘t_mon is ‘ || t_mon);
  c_nextmonth := to_char(t_mon, ‘yymm‘); --转换的日期 转换为字符串  输出格式:01-8月 -16
  dbms_output.put_line(‘c_nextmonth is ‘ || c_nextmonth);

loop
    c_thismonth := c_nextmonth; --取出 当前月份 输出格式:1608    char
    dbms_output.put_line(‘c_thismonth is ‘ || c_thismonth);
    t_mon := add_months(t_mon, 1); --传入值递增一个月 输出格式:01-9月 -16
    t_mon1:=to_char(t_mon,‘yyyy-mm-dd hh24:mi:ss‘);
    dbms_output.put_line(‘t_mon is ‘ || t_mon);
    dbms_output.put_line(‘t_mon1 is ‘||to_char(t_mon,‘yyyy-mm-dd hh24:mi:ss‘));
    c_nextmonth := to_char(t_mon, ‘yymm‘); --取出递增一个月后的字符串 输出格式:1608   字符串
    dbms_output.put_line(‘c_nextmonth is ‘ || c_nextmonth);
    -- 明细表空间名                                     
    v_mxtabts := ‘lvsksk_t_m_‘ || c_thismonth; --拼接明细表空间名 如:lvsksk_t_m_1608
    dbms_output.put_line(‘v_mxtabts is ‘ || v_mxtabts);
    -- 明细索引空间名                                   
    v_mxindts := ‘lvsksk_i_m_‘ || c_thismonth; --拼接明细索引表空间名 如: lvsksk_i_m_1608
    dbms_output.put_line(‘v_mxindts is ‘ || v_mxindts);
    
  --  c_str02:=c_str02||‘partition  p‘||c_thismonth   ||‘ values less than (‘||t_mon||‘)    tablespace ‘ ||v_mxindts||‘,‘||chr(10) ;
    c_str02:=c_str02||‘partition  p‘||c_thismonth   ||‘ values less than (TO_DATE(‘||‘‘‘‘||t_mon1||‘‘‘‘||‘, ‘‘SYYYY-MM-DD HH24:MI:SS‘‘, ‘‘NLS_CALENDAR=GREGORIAN‘‘))    tablespace ‘ ||v_mxindts||‘,‘||chr(10) ;
    
   
        exit when to_char(t_mon, ‘yyyymm‘) > ‘&zzsj‘;
  end loop;
  c_str01:=‘create index  dzfpmx01_index_jssj   on JS_SKSKJDK_DZFPMX01(JSSJ)
global
partition by range(jssj)
(‘||c_str02||‘partition  p_default values less than (maxvalue)    tablespace users)‘;
--   dbms_output.put_line(‘c_str01 is ‘||chr(10)||c_str01||‘);‘
   
     execute immediate  c_str01;
     
     exception
       when   others then
       dbms_output.put_line(sqlerrm);
     
     
     
  end;

/*
First is starting
t_mon is 01-1月 -01
c_nextmonth is 0101
c_thismonth is 0101
t_mon is 01-2月 -01
t_mon1 is 3001-02-01 00:00:00
c_nextmonth is 0102
v_mxtabts is lvsksk_t_m_0101
v_mxindts is lvsksk_i_m_0101
c_thismonth is 0102
t_mon is 01-3月 -01
t_mon1 is 3001-03-01 00:00:00
c_nextmonth is 0103
v_mxtabts is lvsksk_t_m_0102
v_mxindts is lvsksk_i_m_0102
c_thismonth is 0103
t_mon is 01-4月 -01
t_mon1 is 3001-04-01 00:00:00
c_nextmonth is 0104
v_mxtabts is lvsksk_t_m_0103
v_mxindts is lvsksk_i_m_0103
c_thismonth is 0104
t_mon is 01-5月 -01
t_mon1 is 3001-05-01 00:00:00
c_nextmonth is 0105
v_mxtabts is lvsksk_t_m_0104
v_mxindts is lvsksk_i_m_0104
c_thismonth is 0105
t_mon is 01-6月 -01
t_mon1 is 3001-06-01 00:00:00
c_nextmonth is 0106
v_mxtabts is lvsksk_t_m_0105
v_mxindts is lvsksk_i_m_0105
ORA-00955: 名称已由现有对象使用

*/

原文地址:https://www.cnblogs.com/iyoume2008/p/9174805.html

时间: 2024-10-20 13:08:13

传入时间按月分区并创建每月表空间的相关文章

磁盘分区及创建文件系统

机械式硬盘 1.平均寻道时间:ns 2.磁盘转速:rpm 5400 7200 10000rpm 15000rpm track:磁道 sector:扇区,512Bytes,现在我们所说的扇区实际上是平均值 cylinder:柱面,从磁道向所有盘面做投影 partition:分区,基于柱面来划分的存储空间 head:磁头,每个磁盘表面都有一个磁头 设备文件:/dev 设备文件是关联到硬件设备的驱动程序和设备的访问入口 设备号: major:主设备号,区分设备的类型,用于标明设备所需的驱动程序 mij

Linux交换分区的创建和调整

概述 本文对swap进行简要介绍,以及系统安装后(在运行中)如何建立或调整swap分区. 文中演示环境为: 什么是swap space? 交换分区,即swap space.它将某段磁盘空间独立划分出来,当物理内存不够的情况下,系统先把物理内存中暂时不用的数据,暂存到交换空间,腾出内存空间来,以保证程序的运行:当swap中存储的页面被访问到时,系统会将其重新载入到物理内存中去运行.在Windows.Unix.Linux系统中都有交换分区的概念. 怎么分配swap space? 作为系统物理内存的补

[9-1]磁盘分区、创建文件系统、挂载以及链接文件

本文旨在复习磁盘分区.创建文件系统.挂载以及链接文件的基本概念 知识储备 硬盘出厂其实不能写入数据的,是"盲盘",需要处理后使用,格式化分为2种 低格:将空白磁盘划分出柱面.磁道及若干个扇区,每个扇区又划分出标识部分ID.间隔区GAP和数据区DATA等.现在大多出厂已经完成低格,只需要用户磁盘分区即可. 高格:真正意义上的创建文件系统,明确存储设备或分区上的文件方法和数据结构,即在存储设备上组织文件的方法. 文件系统是用户存取磁盘文件操作的"代理人" 不同类型的操作

文件系统管理之分区与创建文件系统

对于机械式磁盘,首先会经过生产厂商的低级格式化(划分磁道的过程),然后需要创建分区(根据柱面划分),最后经过高级格式化(格式化成使用的文件系统),再挂载(将设备关联至根文件系统),之后就可以正常的使用这个磁盘设备了 分区命令:fdisk 这个命令是一个交互式命令 fdisk -l [device] 查看当前系统所有磁盘设备(或某磁盘设备)上的分区,输出内容形似: 可以看出,分区是根据柱面划分的 fdisk device 实现对某设备进行分区相关操作 进入交互式模式之后,使用m子命令可以查看可以使

swap分区的创建

swap分区的创建 swap交换分区是系统RAM的补充,Swap分区支持虚拟内存.当没有足够的RAM保存系统处理的数据时会将数据写入swap分区当系统缺乏swap空间时,内核会因RAM内存耗尽而终止进程.配置过多swap空间会造成存储设备处于分配状态但闲置,造成浪费,过多swap空间还会掩盖内存泄露所以swap分区可以根据物理内存的大小来分配,物理内存过小时可以设置为物理内存的2倍,随着物理内存的逐渐增大,swap的倍数可以逐渐递减. 一.将分区创建为swap 1.划分分区 此处新增一块硬盘sd

磁盘使用:分区,创建文件系统,挂载

虚拟机添加新硬盘 先为虚拟机添加块新硬盘 在虚拟机上右键点击, 出现设置,下一步点下面的添加, 出现硬盘,点击下一步 出现SCSI,继续下一步 点击创建新虚拟盘 继续下一步 最大磁盘大小 看你需求 我选的是120G, 点击将虚拟盘存储为单个文件 继续下一步 出现对话框 点击完成 在虚拟机点设置 就能看到有个新的硬盘 重启虚拟机 之后继续我们要操作的创建分区 进行对新硬盘的分区 查看系统是否有新的硬盘: fdisk -l或者lsblk 我用的是lsblk 如下有新硬盘了 接下来就进行分区了 有两种

【Oracle XE系列之四】创建OracleXE表空间详解

创建OracleXE表空间示例 sqlplus /nolog connect sys as sysdba SQL> create tablespace OPFOCN  datafile 'C:\\oraclexe\\app\\oracle\\oradata\\PF\\opfo.dbf' size 1024m  autoextend on next 1m maxsize 3000m  extent management local  segment space management auto; 表

六分钟学会创建Oracle表空间的步骤

经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space; 2.增加Oracle表空间 先查询数据文件名称.大小和路径的信息,语句如下: select tablespace_name,file_id,bytes,file_name from dba_data_files; 3.修

linux下创建oracle表空间

来自:http://blog.sina.com.cn/s/blog_62192aed01018aep.html 1 . 登录服务器 2 . 查看磁盘空间是否够大df -h -h更具目前磁盘空间和使用情况 以更易读的方式显示 [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 2.9G 2.3G 521M 82% / none 209M 0 209M 0% /dev/shm /dev/s