知识大全 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的表的分类 REGULARTABLE普通表ORACLE推荐的表使用很方便人为控制少 PARTITIONEDTABLE分区表人为控制记录的分布将表的存储空间分为若干独立的分区记录按
此文从以下几个方面来整理关于分区表的概念及操作: 表空间及分区表的概念 表分区的具体作用 表分区的优缺点 表分区的几种类型及操作方法 对表分区的维护性操作 ()表空间及分区表的概念
用Oracle创建实例的参数需求 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们知道Orac
Oracle创建实例的最少参数需求 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们知道Ora
系统环境 操作系统Windows 数据库 OracleiR()forNT企业版 安装路径C:\\ORACLE 解释 可用于表空间回滚段表索引分区快照快照日志 参数名
详细讲解Oracle表分区的相关概念及其优点 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Or
分区表将一个大表根据某种规则分成多个小表从而提高检索效率 查询分区表sql Sql代码 selectuser_tablestable_name fromuser_tables where
Oracle创建表空间 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ORACLE中表空间是数据
知识大全 Oracle创建表空间、创建用户以及授权、查看权限
Oracle创建表空间、创建用户以及授权、查看权限 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Sql代码 createuserusernameidentifiedbypassword; 创建用户 grantdbatousername; 权限 dropuseruse