2022-12-19に投稿

全テーブルの中から対象データが含まれているテーブルと項目を取得

--//出力表示
SET SERVEROUT ON;

DECLARE
    --//変数定義
    type cursor_type is ref cursor;
    cur_search cursor_type;
    vCount INTEGER;
    ERR_CODE NUMBER;
    ERR_MSG VARCHAR2(255);

    TYPE objName IS VARRAY(260) OF VARCHAR2(30);

    --//対象データを指定
    tDATE objName := objName('')


BEGIN
    --//テーブルを指定する(全テーブルの中から特定の文字列が含まれるテーブルを指定)
    FOR vRec (SELECT table_name,column_name FROM user_tab_cols WHERE table_name LIKE '' OR table_name = '')

    LOOP
        BEGIN
            --//指定したテーブルの中から対象データを検索
            FOR i IN tDATA.first..tDATA.last LOOP
                OPEN cur_search FOR 'SELECT COUNT(*) AS cnt FROM ' || vRec.column_name || 'LIKE ''%' || tDATA(i) || '%''';
                    FETCH cur_search INTO vCount;
                    IF vCount > 0 THEN
                        --//対象データがあった場合、そのテーブルと項目名、件数を出力する
                        DBMS_OUTPUT.PUT_LINE( tDATA(i) || ':' || vRec.table_name || '.' || vRec.column_name || ' ' || vCount || '件あり' );
                    END IF;
                CLOSE cur_search;
            END LOOP;
        EXCEPTION
        --//例外処理
        WHEN OTHERS THEN
            ERR_CODE := SQLCODE;
            ERR_MSG  := SUBSTEB(SQLERRM,1,255);
            DBMS_OUTPUT.PUT_LINE('error:' || ERR_CODE || ' ' || ERR_MSG || ' ' || vRec.table_name || '.' ||  vRec.column_name );
        END;
    END LOOP;
END;
/
ツイッターでシェア
みんなに共有、忘れないようにメモ

speasmen88

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント