カラム定義の整合性チェック用SQL
カラム定義の整合性チェック用SQL
概要 データベースの開発に伴って、表の構造は頻繁に修正される。だんだん、カラムの整合性がもてなくなる。このSQLは類似のカラムを一括でチェックし、問題になりそうなカラムを出力してくれる。
結果ですが、データタイプ、サイズを一カラムに集約する形で表現した。
そうでなければ、コンパクトに結果を確認できないから。
皆さんはニーズがあればどうぞdata_typeの定義と比較のところを修正してください。
-- ------------------------------------- -- FUS version 2.1 -- Apache Licence -- oracle-abc.wikidot.com -- ------------------------------------- set lin 80 set pages 9999 column data_type format a25 -- 全体あいまい一致 select /*+ rule */ p.table_name, p.column_name, p.data_type, t.table_name, t.column_name, t.data_type from (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') p join (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') t on ((t.column_name like '%' || p.column_name || '%' or p.column_name like '%' || t.column_name || '%') and p.data_type <> t.data_type) where p.table_name < t.table_name order by p.column_name, p.table_name -- 後方一致 select /*+ rule */ p.table_name, p.column_name, p.data_type, t.table_name, t.column_name, t.data_type from (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') p join (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') t on ((t.column_name like '%' || p.column_name or p.column_name like '%' || t.column_name) and p.data_type <> t.data_type) where p.table_name < t.table_name order by p.column_name, p.table_name -- 前方一致(このネーミングスタイル使っている開発者が少ないと思うが。。。) select /*+ rule */ p.table_name, p.column_name, p.data_type, t.table_name, t.column_name, t.data_type from (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') p join (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') t on ((t.column_name like p.column_name || '%' or p.column_name like t.column_name || '%') and p.data_type <> t.data_type) where p.table_name < t.table_name order by p.column_name, p.table_name -- 完全一致 select /*+ rule */ p.table_name, p.column_name, p.data_type, t.table_name, t.column_name, t.data_type from (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') p join (select table_name, column_name, data_type||'('||nvl(data_precision,data_length)||'.'||nvl(data_scale,'0')||')' data_type from user_tab_columns where table_name not like 'BIN$%') t on ((t.column_name = p.column_name or p.column_name = t.column_name) and p.data_type <> t.data_type) where p.table_name < t.table_name order by p.column_name, p.table_name