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