반응형
Oracle - 특정 ROW의 실제 크기를 얻으려면 어떻게 해야 합니까?
이것이 가능합니까?또는 적어도 테이블의 모든 행 크기 목록을 찾고 있습니다.
select vsize(col1) + vsize(col2) + vsize(col3) +
long_raw_length_function(long_col) + DBMS_LOB.GETLENGTH(blob_col)
from table
where id_col = id_val;
long_raw_length_function에 대한 자세한 내용은 이 항목을 참조하십시오.LONG RAW의 길이 가져오기
평균 행 길이에 관심이 있는 경우 DBMS_STATS 패키지를 사용하여 테이블을 분석한 다음 쿼리할 수 있습니다.ALL_TABLES.avg_row_len.
아래는 데이터가 없을 때 테이블 행 길이를 얻기 위해 수정한 쿼리입니다.이를 통해 환경을 위한 용량 계획을 수립할 수 있습니다.
SET serveroutput ON linesize 300
DECLARE
v_max_size NUMBER := 0;
v_owner VARCHAR2(30);
v_table_name VARCHAR2(30);
v_data_type VARCHAR2(30);
v_data_length NUMBER := 0;
v_data_precision NUMBER := 0;
CURSOR CUR_TABLE
IS
SELECT DISTINCT table_name
FROM all_tab_columns
WHERE owner='TMS_OWNER'
AND table_name NOT LIKE 'VIEW%'
ORDER BY table_name;
BEGIN
FOR Tab IN CUR_TABLE
LOOP
v_table_name := Tab.table_name;
v_max_size := 0;
FOR i IN
(SELECT owner,
table_name,
data_type,
data_length,
data_precision
FROM all_tab_columns
WHERE owner ='TMS_OWNER'
AND table_name = v_table_name
)
LOOP
IF i.data_type = 'NUMBER' THEN
v_max_size := (v_max_size + i.data_precision);
ELSE
v_max_size := (v_max_size + i.data_length);
END IF;
END LOOP;
dbms_output.put_line(chr(10));
dbms_output.put_line('Table ='||v_table_name||', Max Record Size = '||v_max_size||' bytes');
END LOOP;
END;
/
언급URL : https://stackoverflow.com/questions/5871369/oracle-how-do-i-get-the-actual-size-of-a-specific-row
반응형
'programing' 카테고리의 다른 글
| 레일즈: 큰 숫자에 쉼표를 추가하는 레일즈 트릭이 있습니까? (0) | 2023.07.16 |
|---|---|
| Lucene을 구성합니다.SQL Server를 사용한 넷 (0) | 2023.07.16 |
| PL/Sql 프로시저 대 함수? (0) | 2023.07.16 |
| 오-마이-즈시 느리지만, 특정 깃레포에 대해서만. (0) | 2023.07.16 |
| 홈브루의 PATH를 어떻게 수정합니까? (0) | 2023.07.16 |