Как подсчитать количество столбцов в таблице, которые являются PK (PL-SQL)

ВВЕДЕНИЕ

Я наткнулся на это упражнение, в котором меня просят написать скрипт, который подсчитывает количество строк, подсчитывает количество столбцов с ПК и потребляемое хранилище.

Читая документы, я наткнулся на эту полезную строку:

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 соответствует стандартам SQL, но я думаю, что вы ищете базу данных information_schema, которая должна содержать метаданные для баз данных/схем и таблиц SQL. "а память, потребляемая данной таблицей?" Скорее всего, вам придется вычислить это самостоятельно, если вы не уверены, что Oracle где-то раскрывает эту информацию.
Raymond Nijland 07.04.2019 15:47

Также какой Oracle версия вы используете?

Raymond Nijland 07.04.2019 15:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
2
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Типичное решение для перечисления столбцов, участвующих в первичном ключе таблицы, состоит в следующем:

  • запросите представления 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.

Другие вопросы по теме