在oracle中对表进行分区操作

本文介绍如何在Oracle数据库中对表进行分区操作,包括创建、检查和删除分区的具体步骤及SQL语句。通过示例展示了如何根据品牌名称进行分区,并提供了分区表管理的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除分区表

alter table [表名称] drop partition [分区表的名称] ;

select * from user_tab_partitions d where  d.table_name='BMP_CUSTOMER_INTERACTION';

-- user_tab_partitions 当前的用户。所以不用用户table_owner=USER 和 dba_tab_partitions 而它存在授权的问题一般不用这个。这个不同要用table_owner=USER

下面是用来检测是否有分区。如果有就显现出来 我在PL/SQL test Window执行的

SELECT * FROM dba_tab_partitions p WHERE p.table_owner=USER AND p.table_name='BMP_CUSTOMER_INTERACTION' AND  p.partition_name='BRAND_ACTOS'

“BMP_CUSTOMER_INTERACTION” 是表的名称一定要大写如果小写‘bmp_customer_interaction’ 检索不到数据的

table_owner=USER 是你的登陆的用

 

-- Created on 2/17/2011 by ADMINISTRATOR

对下面的对应的三张表进行分区

 

DECLARE
  v_tablespace VARCHAR2(80) := NULL; 表空间
  v_brand      VARCHAR2(20) := 'ACTOS';-- 品牌的名称 按品牌来分区
  v_company    VARCHAR2(80) := NULL; 公司的名称
  v_sql        VARCHAR2(4000) := NULL;
  v_count      NUMBER := 0;
BEGIN
  IF USER = 'BMP' THEN
    v_tablespace := 'TABLESPACE BMP_DATA_A';
  END IF;

  如果没有记录时:

  SELECT COUNT(1)
    INTO v_count
    FROM bmp_brand b
   WHERE b.brd_brand = v_brand;

  IF v_count > 0
  THEN
    SELECT b.brd_company
      INTO v_company
      FROM bmp_brand b
     WHERE b.brd_brand = v_brand;
  END IF;

   v_sql := 'SELECT COUNT(1) FROM user_tab_partitions p WHERE p.table_name=''BMP_CUSTOMER_INTERACTION'' AND  p.partition_name=''BRAND_'||v_brand||'''';
   dbms_output.put_line(v_sql);
          
  EXECUTE IMMEDIATE (v_sql) INTO v_count;
    dbms_output.put_line(v_count);

 v_sql := 'ALTER TABLE bmp_customer_interaction SPLIT PARTITION BRAND_DEFAULT VALUES (''' ||
           v_brand || ''') INTO (PARTITION BRAND_' || v_brand ||
           v_tablespace || ', PARTITION BRAND_DEFAULT' || v_tablespace || ')';
 
-- 进行判断当前用户是否进行分区,如果有分区的 v_count =1否侧v_count =0;为0进行分区;
  IF v_count = 0 THEN
    dbms_output.put_line(v_sql);
    EXECUTE IMMEDIATE (v_sql);-- 就执行这个语句;

  END IF;
v_sql := 'SELECT COUNT(1) FROM user_tab_partitions p WHERE p.table_name=''BMP_TX_RESPONSE'' AND  p.partition_name=''BRAND_'||v_brand||'''';

   dbms_output.put_line(v_sql);
          
  EXECUTE IMMEDIATE (v_sql) INTO v_count;

  v_sql := 'ALTER TABLE bmp_tx_response ADD PARTITION BRAND_' || v_brand ||
           ' VALUES (''' || v_brand || ''')' || v_tablespace;
  dbms_output.put_line(v_sql);
 
  IF v_count = 0 THEN
    EXECUTE IMMEDIATE (v_sql);
  END IF;
  v_sql := 'SELECT COUNT(1) FROM user_tab_partitions p WHERE p.table_name=''BMP_CUSTOMER'' AND  p.partition_name=''COMPANY_'||v_company||'''';
   dbms_output.put_line(v_sql);

  EXECUTE IMMEDIATE (v_sql)INTO v_count;
   
  v_sql := 'ALTER TABLE bmp_customer ADD PARTITION COMPANY_' || v_company ||
           ' VALUES (''' || v_company || ''')' || v_tablespace;
  dbms_output.put_line(v_sql);

  IF v_count = 0 THEN
    EXECUTE IMMEDIATE (v_sql);
  END IF;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值