简介
我遇到了这个练习,要求我编写一个脚本,该脚本计算有多少行,有多少列以及PK,有多少和消耗的存储空间。
阅读文档时,我发现了以下有用的内容:
ANALYZE TABLE table_name COMPUTE STATISTICS FOR TABLE;
此行收集给定table_name
的统计信息,然后可以这样访问该统计信息:
SELECT *
FROM user_tables
WHERE table_name LIKE 'table_name'
在这里,它从我们之前输入的表中显示了很多内容,但是我找不到具有PK的列数以及该表消耗的存储空间。
我的TRY AT 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涉及的列数和消耗的存储空间?
答案 0 :(得分:3)
列出表主键中涉及的列的典型解决方案是:
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
列中存储表的表空间的块大小。