1 CREATE OR REPLACE PROCEDURE TABLES_COL_MAX AS
2 COUNT_SQL VARCHAR2(2000);
3 P_TABLE_NAME VARCHAR2(2000);
4 P_COL_NAME VARCHAR2(2000);
5 P_COL_TYPE VARCHAR2(2000);
6 P_DATA_LEN VARCHAR2(2000);
7 EXCEPT_SQL VARCHAR2(2000);
8 BEGIN
9 EXECUTE IMMEDIATE 'DROP TABLE T_ROWS_MAX';
10 EXECUTE IMMEDIATE 'CREATE TABLE T_ROWS_MAX (TABLE_NAME varchar2(200) ,COL_NAME varchar2(200),COL_TYPE varchar2(50), LENMAX number)';
11 FOR CUR IN (select uc.TABLE_NAME, uc.COLUMN_NAME, uc.data_type,uc.data_length
12 from user_tab_columns uc) LOOP
13 P_TABLE_NAME := CUR.TABLE_NAME;
14 P_COL_NAME := CUR.COLUMN_NAME;
15 P_COL_TYPE := CUR.data_type;
16 P_DATA_LEN := CUR.data_length;
17 IF P_COL_TYPE <>'BLOB' OR P_COL_TYPE <>'CLOB' THEN
18 BEGIN
19 COUNT_SQL := 'insert into T_ROWS_MAX(TABLE_NAME,COL_NAME,COL_TYPE,LENMAX) SELECT ''' ||
20 P_TABLE_NAME || '''AS TABLE_NAME , ''' || P_COL_NAME ||
21 '''AS COL_NAME, ''' || P_COL_TYPE ||
22 '''AS COL_TYPE, MAX(LENGTH('||P_COL_NAME||'
23 )) AS LENMAX FROM ' || P_TABLE_NAME;
24 EXECUTE IMMEDIATE COUNT_SQL;
25 COMMIT;
26 EXCEPTION
27 WHEN OTHERS THEN
28 EXCEPT_SQL := 'insert into T_ROWS_MAX(TABLE_NAME,COL_NAME,COL_TYPE,LENMAX) SELECT ''' ||
29 P_TABLE_NAME || '''AS TABLE_NAME , ''' || P_COL_NAME ||
30 '''AS COL_NAME, ''' || P_COL_TYPE ||
31 '''AS COL_TYPE, '|| P_DATA_LEN ||' AS LENMAX FROM ' || P_TABLE_NAME;
32
33 EXECUTE IMMEDIATE EXCEPT_SQL;
34 COMMIT;
35 END;
36 END IF;
37 END LOOP;
38
39 END TABLES_COL_MAX;