ВВЕДЕНИЕ
Я наткнулся на это упражнение, в котором меня просят написать скрипт, который подсчитывает количество строк, подсчитывает количество столбцов с ПК и потребляемое хранилище.
Читая документы, я наткнулся на эту полезную строку:
ANALYZE TABLE table_name COMPUTE STATISTICS FOR TABLE;
Эта строка собирает статистику данного table_name
, к которой затем можно получить доступ как таковой:
SELECT *
FROM user_tables
WHERE table_name LIKE 'table_name'
Здесь он отображает многое из таблицы, которую мы ранее ввели, но я не могу найти количество столбцов с PK и объем памяти, потребляемый такой таблицей.
Моя ПОПРОБУЙТЕ PL-SQL:
DECLARE
v_nom_table VARCHAR2(10);
v_num_rows NUMBER(100);
v_num_col_pk NUMBER(100);
v_num_storage NUMBER(100);
BEGIN
v_nom_table := &input_nom_table;
ANALYZE TABLE v_nom_table COMPUTE STATISTICS FOR TABLE;
SELECT num_row INTO v_num_rows
FROM user_tables
WHERE UPPER(table_name) LIKE UPPER(v_nom_table )
DBMS_OUTPUT.PUT_LINE(
'La tabla ' || v_nom_table || ' tiene: ' || v_num_rows || ' filas, '
|| v_num_col_pk || ' columnas con PK y ocupa ' || v_num_storage
);
ВОПРОС
Как получить количество столбцов, участвующих в PK, и объем памяти, потребляемый данной таблицей?
Также какой Oracle версия вы используете?
Типичное решение для перечисления столбцов, участвующих в первичном ключе таблицы, состоит в следующем:
USER_CONSTRAINTS
(или ALL_CONSTRAINTS
), чтобы найти запись, относящуюся к первичному ключу (CONSTRAINT_TYPE = P
) таблицыUSER_CONS_COLUMNS
Рассмотреть возможность:
SELECT COUNT(*)
FROM user_constraints cons
INNER JOIN user_cons_columns cols ON cons.constraint_name = cols.constraint_name
WHERE cons.constraint_type = 'P' AND cons.table_name = ?
Когда дело доходит до вычисления дискового пространства, занимаемого данной таблицей, это другой вопрос. Решение состоит в том, чтобы использовать столбец BLOCKS
из представления USER_TABLES
. Затем все, что вам нужно сделать, это умножить это значение на размер блока табличного пространства, в котором таблица хранится в представлении ALL_TABLESPACES
, в столбце BLOCK_SIZE
.
information_schema
, которая должна содержать метаданные для баз данных/схем и таблиц SQL. "а память, потребляемая данной таблицей?" Скорее всего, вам придется вычислить это самостоятельно, если вы не уверены, что Oracle где-то раскрывает эту информацию.