知识大全 oracle存储过程创建表分区实例

Posted

篇首语:自觉心是进步之母,自贱心是堕落之源,故自觉心不可无,自贱心不可有。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle存储过程创建表分区实例相关的知识,希望对你有一定的参考价值。

  用存储过程创建数据表:创建时注意必须添加authid current_user 如果创建的表已存在 存储过程继续执行 但如不不加此关键语句 存储过程将出现异常 这个语句相当于赋权限 例 创建语句如下

  复制代码 代码如下:

  create or replaceprocedure sp_create_mnl(i_id varchar ) authid current_user  as   /********************************* 名称 sp_create_mnl 功能描述 创建模拟量历史数据存储表 修订记录 版本号   编辑时间  编辑人  修改描述     wylaok  创建此存储过程     wylaok  修改表名称及变量名称 增加必要注释 入参出参描述 i_id 测点编号 **********************************/       v_tablename varchar ( ); 表名       v_flag number( );       v_sqlfalg varchar( ); begin   v_flag:= ;       v_tablename:=CONCAT( MNL UPPER(i_id));       v_sqlfalg:= select count(*) from user_TABLES where table_name= ||v_tablename|| ;       dbms_output put_line(v_sqlfalg);       execute immediate v_sqlfalg into v_flag;       if v_flag= then  如果没有这个表 则去创建          begin   execute immediate create table ||v_tablename ||   ( DATETIME DATE   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AVG     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MIN     FLOAT   AGV     FLOAT   MAX     FLOAT   MINV     FLOAT   MAXV     FLOAT   AVGV     FLOAT   MAXTIME  DATE   MINTIME  DATE   )   tablespace WYG   pctfree   initrans   maxtrans   storage   (     initial K     next K     minextents     maxextents unlimited     pctincrease   ) ;       execute immediate sqlstr;          end;       end if;       end;

调用此存储过程

  复制代码 代码如下:

  begin  createmnl( mnl_ );  end;

  复制代码 代码如下:

  CREATE OR REPLACE PROCEDURE BIP_MMS_PARTITION_PROC AS  v_Mms_Task_Tab    VARCHAR ( ); 表名   v_Mms_Content_Tab VARCHAR ( );   v_Mms_User_Tab    VARCHAR ( );   v_TableSpace      VARCHAR ( ); 表空间   v_PartPreFlag     VARCHAR ( ); 分区名标识   v_SqlCursor       NUMBER; 游标   v_SqlExec         VARCHAR ( ); 执行语句   v_PartPreDate     VARCHAR ( ); 分区日期   v_RangeValue      NUMBER;   v_RangeDate       NUMBER;   v_Rows            NUMBER( ) := ;   v_Num             NUMBER( ) := ;   vErrInfo          VARCHAR ( );   p_DateFrom        NUMBER;   p_PartNum         NUMBER;   p_Range           NUMBER; BEGIN  v_Mms_Task_Tab    := BIP_MMS_MT_TASK_LOG_TAB_TEST ;   v_Mms_Content_Tab := BIP_MMS_MT_CONTENT_TAB_TEST ;   v_Mms_User_Tab    := BIP_MMS_MT_USER_LOG_TAB_TEST ;   读取配置参数   BEGIN    SELECT TO_NUMBER(VALUE)       INTO p_DateFrom       FROM BIP_OTHERS_PROPERTIES_TAB      WHERE NAME = p_DateFrom ;     SELECT TO_NUMBER(VALUE)       INTO p_PartNum       FROM BIP_OTHERS_PROPERTIES_TAB      WHERE NAME = p_PartNum ;     SELECT TO_NUMBER(VALUE)       INTO p_Range       FROM BIP_OTHERS_PROPERTIES_TAB      WHERE NAME = p_Range ;   EXCEPTION     WHEN OTHERS THEN      BEGIN        p_DateFrom := ;         p_PartNum  := ;         p_Range    := ;       END;   END;   记录存储过程添加分区   INSERT INTO BIP_LOG_STAT_EXEC_TAB   VALUES    (TO_CHAR(SYSDATE yyyymmddhh miss )      BIP_MMS_PARTITION_PROC_ADD      BEGIN );   MIT;   ADD PARTITION    FOR i IN p_PartNum LOOP     BIP_MMS_MT_CONTENT_TAB 添加分区     v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i YYYYMMDD );     dbms_output put_line(v_PartPreDate);     v_Num         := ;     v_TableSpace  := BIP_MMS_TS_TEST ;     v_PartPreFlag := MMS_MT_CONTENT ;     SELECT COUNT(*)       INTO v_Num       FROM user_tab_partitions      WHERE table_name = v_Mms_Content_Tab        AND SUBSTR(partition_name ) = v_PartPreDate;     IF v_Num < THEN      v_RangeDate  := TO_CHAR(SYSDATE + p_DateFrom + i YYYYMMDD );       v_RangeValue := v_RangeDate || ;       dbms_output put_line(v_RangeValue);       v_SqlExec := ALTER TABLE || v_Mms_Content_Tab || ADD PARTITION ||                    v_PartPreFlag || _ || v_PartPreDate ||                    VALUES LESS THAN( || v_RangeValue ||                    ) TABLESPACE || v_TableSpace;       dbms_output put_line(v_SqlExec);       v_SqlCursor := DBMS_SQL OPEN_CURSOR;       DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);       v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);       DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     END IF;     BIP_MMS_MT_TASK_LOG_TAB_TEST 添加分区     v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i YYYYMMDD );     v_Num         := ;     v_TableSpace  := BIP_MMS_TS_TEST ;     v_PartPreFlag := MMS_MT_TASK_LOG ;     SELECT COUNT(*)       INTO v_Num       FROM user_tab_partitions      WHERE table_name = v_Mms_Task_Tab        AND SUBSTR(partition_name ) = v_PartPreDate;     IF v_Num < THEN      v_RangeDate  := TO_CHAR(SYSDATE + p_DateFrom + i YYYYMMDD );       v_RangeValue := v_RangeDate || ;       v_SqlExec    := ALTER TABLE || v_Mms_Task_Tab || ADD PARTITION ||                       v_PartPreFlag || _ || v_PartPreDate ||                       VALUES LESS THAN( || v_RangeValue ||                       ) TABLESPACE || v_TableSpace;       dbms_output put_line(v_SqlExec);       v_SqlCursor := DBMS_SQL OPEN_CURSOR;       DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);       v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);       DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     END IF;     BIP_MMS_MT_USER_LOG_TAB_TEST 添加分区     v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i YYYYMMDD );     v_Num         := ;     v_TableSpace  := BIP_MMS_TS_TEST ;     v_PartPreFlag := MMS_MT_USER_LOG ;     SELECT COUNT(*)       INTO v_Num       FROM user_tab_partitions      WHERE table_name = v_Mms_User_Tab        AND SUBSTR(partition_name ) = v_PartPreDate;     IF v_Num < THEN      v_RangeDate  := TO_CHAR(SYSDATE + p_DateFrom + i YYYYMMDD );       v_RangeValue := v_RangeDate || ;       v_SqlExec    := ALTER TABLE || v_Mms_User_Tab || ADD PARTITION ||                       v_PartPreFlag || _ || v_PartPreDate ||                       VALUES LESS THAN( || v_RangeValue ||                       ) TABLESPACE || v_TableSpace;       dbms_output put_line(v_SqlExec);       v_SqlCursor := DBMS_SQL OPEN_CURSOR;       DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);       v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);       DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     END IF;   END LOOP;   MIT;   INSERT INTO BIP_LOG_STAT_EXEC_TAB   VALUES    (TO_CHAR(SYSDATE yyyymmddhh miss ) BIP_MMS_PARTITION_PROC_ADD END );   MIT;   DELETE PARTITION   INSERT INTO BIP_LOG_STAT_EXEC_TAB   VALUES    (TO_CHAR(SYSDATE yyyymmddhh miss )      BIP_MMS_PARTITION_PROC_DEL      BEGIN );   MIT;   BEGIN    v_PartPreFlag := MMS_MT_CONTENT || _ ||                      TO_CHAR(SYSDATE p_Range yyyymmdd );     dbms_output put_line(v_PartPreFlag);     v_SqlExec := ALTER TABLE || v_Mms_Content_Tab ||                  TRUNCATE PARTITION || v_PartPreFlag;     dbms_output put_line(v_SqlExec);     v_SqlCursor := DBMS_SQL OPEN_CURSOR;     DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);     v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);     DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     dbms_output put_line(v_PartPreFlag || truncated );     v_SqlExec := ALTER TABLE || v_Mms_Content_Tab || DROP PARTITION ||                  v_PartPreFlag;     dbms_output put_line(v_SqlExec);     v_SqlCursor := DBMS_SQL OPEN_CURSOR;     DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);     v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);     DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     dbms_output put_line(v_PartPreFlag || dropped );   END;   BEGIN    v_PartPreFlag := MMS_MT_TASK_LOG || _ ||                      TO_CHAR(SYSDATE p_Range yyyymmdd );     dbms_output put_line(v_PartPreFlag);     v_SqlExec := ALTER TABLE || v_Mms_Task_Tab || TRUNCATE PARTITION ||                  v_PartPreFlag;     dbms_output put_line(v_SqlExec);     v_SqlCursor := DBMS_SQL OPEN_CURSOR;     DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);     v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);     DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     dbms_output put_line(v_PartPreFlag || truncated );     v_SqlExec   := ALTER TABLE || v_Mms_Task_Tab || DROP PARTITION ||                    v_PartPreFlag;     v_SqlCursor := DBMS_SQL OPEN_CURSOR;     DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);     v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);     DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     dbms_output put_line(v_PartPreFlag || dropped );   END;   BEGIN    v_PartPreFlag := MMS_MT_USER_LOG || _ ||                      TO_CHAR(SYSDATE p_Range yyyymmdd );     dbms_output put_line(v_PartPreFlag);     v_SqlExec := ALTER TABLE || v_Mms_User_Tab || TRUNCATE PARTITION ||                  v_PartPreFlag;     dbms_output put_line(v_SqlExec);     v_SqlCursor := DBMS_SQL OPEN_CURSOR;     DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);     v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);     DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     dbms_output put_line(v_PartPreFlag || truncated );     v_SqlExec   := ALTER TABLE || v_Mms_User_Tab || DROP PARTITION ||                    v_PartPreFlag;     v_SqlCursor := DBMS_SQL OPEN_CURSOR;     DBMS_SQL PARSE(v_SqlCursor v_SqlExec DBMS_SQL NATIVE);     v_Rows := DBMS_SQL EXECUTE(v_SqlCursor);     DBMS_SQL CLOSE_CURSOR(v_SqlCursor);     dbms_output put_line(v_PartPreFlag || dropped );   END;   MIT;   INSERT INTO BIP_LOG_STAT_EXEC_TAB   VALUES    (TO_CHAR(SYSDATE yyyymmddhh miss )      BIP_MMS_PARTITION_PROC_DEL      END );   MIT; EXCEPTION   WHEN OTHERS THEN    BEGIN      ROLLBACK;       dbms_output put_line(TO_CHAR(SQLCODE));       vErrInfo := SUBSTR(SQLERRM );       dbms_output put_line(TO_CHAR(vErrInfo));       INSERT INTO BIP_LOG_STAT_EXEC_TAB       VALUES        (TO_CHAR(SYSDATE yyyymmddhh miss )          BIP_MMS_PARTITION_PROC_ERROR          vErrInfo);       MIT;     END; end bip_mms_partition_proc; 

cha138/Article/program/Oracle/201405/30854

相关参考

知识大全 oracle 基础入门

  一ORACLE的表的分类  REGULARTABLE普通表ORACLE推荐的表使用很方便人为控制少  PARTITIONEDTABLE分区表人为控制记录的分布将表的存储空间分为若干独立的分区记录按

知识大全 oracle表分区详解

  此文从以下几个方面来整理关于分区表的概念及操作:  表空间及分区表的概念  表分区的具体作用  表分区的优缺点  表分区的几种类型及操作方法  对表分区的维护性操作  ()表空间及分区表的概念  

知识大全 用Oracle创建实例的参数需求

用Oracle创建实例的参数需求  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们知道Orac

知识大全 Oracle创建实例的最少参数需求

Oracle创建实例的最少参数需求  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们知道Ora

知识大全 存储参数storage子句含义及设置技巧

  系统环境  操作系统Windows  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    解释        可用于表空间回滚段表索引分区快照快照日志    参数名

知识大全 详细讲解Oracle表分区的相关概念及其优点

详细讲解Oracle表分区的相关概念及其优点  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Or

知识大全 oracle分区表全分区扫描问题

  分区表将一个大表根据某种规则分成多个小表从而提高检索效率  查询分区表sql  Sql代码  selectuser_tablestable_name  fromuser_tables  where

知识大全 Oracle创建表空间

Oracle创建表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE中表空间是数据

知识大全 Oracle创建表空间、创建用户以及授权、查看权限

Oracle创建表空间、创建用户以及授权、查看权限  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 oracle创建用户、权限、表空间

  Sql代码  createuserusernameidentifiedbypassword; 创建用户  grantdbatousername; 权限  dropuseruse