Oracle

全テーブルから特定の型のカラムの値で後ろに空白(指定した値)が入っているものを抽出するSQLというかプロシージャ

全テーブルから特定の型のカラムの値で後ろに空白(指定した値)が入っているものを抽出する

CHAR型からVARCHAR2型に移行した時など不用意に混入していないか調査するときに作成しました

指定箇所を変えれば好きなもの抽出できますが、実行結果が返ってくるまで時間がかかるのでテーブル名やカラム名の条件追加して絞ったほうがいいです

※↓のエリア内文字切れてるのでカーソルあてて出てくるエリアの右端の斜め右上線をクリックすると全体化されます

 

--全テーブルから特定の型のカラムの値で後ろに空白が入っているものを抽出する
declare
 sSQL VARCHAR2(128);
 sDATA VARCHAR2(500);
 type cursor_type is ref cursor;
 cur_search cursor_type;
 vCount INTEGER;
 ERR_CODE NUMBER := 0;
 ERR_MSG VARCHAR(255);
begin
 for vRec in (select COLUMN_NAME,TABLE_NAME from USER_TAB_COLS where DATA_TYPE = 'VARCHAR2' order by TABLE_NAME)
 loop
  begin
    open cur_search for 'select count(*) as cnt from ' || vRec.TABLE_NAME || ' where ' || vRec.COLUMN_NAME || ' like ''% ''';--ここに条件指定
        fetch cur_search into vCount;
        if vCount > 0 then
          dbms_output.put_line(vRec.TABLE_NAME || '.' || vRec.COLUMN_NAME || ':' || vCount || '件あり');
        end if;
        close cur_search;
  exception
   WHEN OTHERS THEN
    ERR_CODE := SQLCODE;
    ERR_MSG  := SUBSTRB(SQLERRM,1,255);
    dbms_output.put_line('error:' || ERR_CODE || ' ' || ERR_MSG || ' ' || vRec.TABLE_NAME || '.' || vRec.COLUMN_NAME);
  end;
 end loop;
end;

スポンサーリンク

-Oracle
-, ,

© 2024 ぱそやんうぇぶ