Начиная с версии 10gR2 вы можете использовать DBMS_SPACE.CREATE_INDEX_COST
DBMS_SPACE.CREATE_INDEX_COST (
ddl IN VARCHAR2,
used_bytes OUT NUMBER,
alloc_bytes OUT NUMBER,
plan_table IN VARCHAR2 DEFAULT NULL);
Из документов: «Эта процедура определяет стоимость создания индекса для существующей таблицы. Входными данными является оператор DDL, который будет использоваться для создания индекса. Процедура выведет память, необходимую для создания индекса».
См. https://docs.oracle.com/database/121/ARPLS/d_space.htm#ARPLS68101
Пример (также на sqlfiddle ):
DECLARE
ub NUMBER;
ab NUMBER;
BEGIN
DBMS_SPACE.CREATE_INDEX_COST (
ddl => 'CREATE INDEX x_1 ON t1 (a,b,c) TABLESPACE users',
used_bytes => ub,
alloc_bytes => ab
);
DBMS_OUTPUT.PUT_LINE('Used MBytes: ' || ROUND(ub/1024/1024));
DBMS_OUTPUT.PUT_LINE('Alloc MBytes: ' || ROUND(ab/1024/1024));
END;
/
Выход:
Used MBytes: 1
Alloc MBytes: 2