Как написать код pl sql для создания нового разделенного раздела в таблице? - PullRequest
1 голос
/ 29 февраля 2020

Это мой оператор alter:

alter table demo_table
split partition PART_35 values('9999') into (partition PART_35, partition PART_36)

Таблица уже состоит из списка разделов в emp_id, где PART_35 - последний созданный раздел, и в нем используется значение по умолчанию, используемое в ORACLE и PART_36 это новый раздел, который я создал.

Процедура будет принимать два аргумента:

  1. Имя таблицы
  2. Emp_id (в приведенном выше коде 9999 это emp_id, который Я хочу создать раздел, в основном я
    создаю раздел на emp_id)

Точка, в которой я застреваю, состоит в том, как считать part_35 и part_36 обобщенным. Таким образом, для каждого раздела, если пользователь передаст emp_id и имя таблицы, будет создан новый раздел с указанием part_35 для emp_id 9999 и part_36 в качестве раздела для значения по умолчанию в oracle. Примечание. Раздел, имеющий значение по умолчанию, будет последним разделом каждой таблицы.

Спасибо:)

1 Ответ

0 голосов
/ 01 марта 2020

Когда вы создаете таблицу со списком разделов, вы даете ей имя раздела по умолчанию и разделяете его, когда вам нужен новый раздел.

Давайте рассмотрим это немного. Например, у вас есть таблица с именем demo_table, верно?

CREATE TABLE DEMO_TABLE
(
ID NUMBER,
NAME VARCHAR2(100 CHAR)
)
PARTITION BY LIST (ID) 
(
     PARTITION PDEFAULT VALUES (DEFAULT)
);

И создайте процедуру для разбиения ее раздела при необходимости.

CREATE OR REPLACE PROCEDURE DEMO_PROCEDURE (TABLENAME VARCHAR2,PID VARCHAR2)
IS
V_CONTROL NUMBER;
BEGIN
--Controls if any of the given partitions created before??
   SELECT COUNT (*)
     INTO V_CONTROL
     FROM USER_TAB_PARTITIONS
    WHERE     TABLE_NAME = TABLENAME
          AND PARTITION_NAME = 'P' || PID;

   IF V_CONTROL > 0
   THEN
      EXECUTE IMMEDIATE
            'ALTER TABLE '||TABLENAME ||' DROP PARTITION P'|| PID;
   END IF;

   EXECUTE IMMEDIATE
         'ALTER TABLE '||TABLENAME ||' SPLIT PARTITION PDEFAULT VALUES('
      || PID
      || ') INTO ( PARTITION P'
      || PID
      || ',PARTITION PDEFAULT)';

END DEMO_PROCEDURE;
/

Ниже должен работать код.

Официальные документы.

alter table demo_table
split partition YOUR_DEFAULT_PARTITION(In your case it is PART_35) values('9999') into 
(partition YOUR_NEW_PARTITION, partition YOUR_DEFAULT_PARTITION(In your case it is PART_35))
...