テーブル定義書をpl/sqlでつくってみた
SET SERVEROUT ON SIZE 1000000 SET LINESIZE 1000 DECLARE CURSOR table_cur IS SELECT t.table_name AS table_name ,tc.comments AS comments FROM user_tables t LEFT JOIN user_tab_comments tc ON t.table_name = tc.table_name ORDER BY t.table_name; CURSOR column_cur(b_table_name varchar2) IS SELECT c.column_name AS column_name_p ,SUBSTR(cc.comments,1,INSTR(cc.comments,'|')-1) AS column_name_l ,SUBSTR(cc.comments,INSTR(cc.comments,'|')+1,LENGTH(cc.comments)-INSTR(cc.comments,'|')) AS column_note ,(SELECT 'PK' FROM user_constraints con INNER JOIN user_cons_columns conc ON con.table_name = conc.table_name AND con.constraint_name = conc.constraint_name WHERE con.constraint_type = 'P' AND conc.table_name = c.table_name AND conc.column_name = c.column_name) as primary_key ,c.nullable ,c.data_type ,c.data_length ,c.data_scale ,c.data_default FROM user_tab_columns c LEFT JOIN user_col_comments cc ON cc.table_name = c.table_name AND cc.column_name = c.column_name WHERE c.table_name = b_table_name ORDER BY c.column_id; BEGIN DBMS_OUTPUT.PUT_LINE( 'PHYSICAL_TABLE_NAME' || ',LOGICAL_TABLE_NAME' || ',PHYSICAL_COLUMN_NAME' || ',LOGICAL_COLUMN_NAME' || ',PRIMARY_KEY' || ',NULLABLE' || ',DATA_TYPE' || ',DATA_LENGTH' || ',DATA_SCALE' || ',DATA_DEFAULT' || ',COLUMN_NOTE' ); FOR rec_tab IN table_cur LOOP DBMS_OUTPUT.PUT_LINE(rec_tab.table_name || ',' || rec_tab.comments); FOR rec_col IN column_cur(rec_tab.table_name) LOOP DBMS_OUTPUT.PUT_LINE( ',,' || rec_col.column_name_p || ',' || rec_col.column_name_l || ',' || rec_col.primary_key || ',' || rec_col.nullable || ',' || rec_col.data_type || ',' || rec_col.data_length || ',' || rec_col.data_scale || ',' || rec_col.data_default || ',' || rec_col.column_note ); END LOOP; END LOOP; END; / QUIT;
テーブルコメントを テーブル論理名に
カラムコメントを カラム論理名+備考につかってみました。
カラムコメントは セパレータを「|」にして論理名と備考をわけてます。