在oracle中对表进行分区操作

    技术2026-04-01  3

    删除分区表

    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;

    最新回复(0)