• ベストアンサー

★Oracle8i★ データベースの中の文字列を検索してくれるフリーソフト探しています。

ご存知の方、どうかおしえて下さい。データベースの中の指定した文字列を検索して、どのテーブルのどのカラムに格納されているかがわかるフリーのソフトはないでしょうか? 環境 : Win XP 利用DB:Oracle8i 宜しくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • sippo06
  • ベストアンサー率25% (7/27)
回答No.2

NO.1です。 ごめんなさい。 CREATEの行を 「CREATE OR REPLACE FUNCTION SERCH_TXT」にしてください。 (私のデータベースのユーザー名がついてました)

その他の回答 (1)

  • sippo06
  • ベストアンサー率25% (7/27)
回答No.1

こんにちわ。 PL/SQLで似たようなことを調べたことがあります。 よろしかったらどうぞ。 CREATE OR REPLACE FUNCTION RESOW.SERCH_TXT ( Taget_TXT IN Varchar2, --探したい文字列 Target_Owner IN Varchar2--テーブルを持つユーザー ) RETURN Varchar2 IS --テーブル名・列名をディクショナリビューから取得 CURSOR GetFld IS SELECT * FROM ALL_TAB_COLUMNS where DATA_TYPE='VARCHAR2' AND OWNER = Target_Owner; --SELECT文を生成する変数 STR_SQL Varchar2(20000); --探したい文字列のレコード数を取得する変数 Counter Number; --テーブル名・列名を返すためのバッファ strReturn Varchar2(20000); BEGIN For CurRec IN GetFld Loop Counter := 0; --探したい文字列のレコード数を取得するSELECT文を生成 STR_SQL := 'SELECT COUNT(*) FROM ' || Target_Owner || '.' || CurRec.TABLE_NAME || ' WHERE ' || CurRec.COLUMN_NAME || ' LIKE ' || '''%' || Taget_TXT || '%''' || ' HAVING COUNT(*) > 0 '; Begin --SELECT文を実行 EXECUTE IMMEDIATE STR_SQL INTO Counter; Exception --該当なしの場合、0をカウント WHEN NO_DATA_FOUND THEN Counter := 0; END; IF Counter > 0 Then --カウントが0以上の場合、テーブル名・列名をコンマつなぎでバッファに格納 strReturn := strReturn || ' , ' || CurRec.TABLE_NAME || '.' || CurRec.COLUMN_NAME; End if; End Loop; return strReturn; Exception WHEN NO_DATA_FOUND THEN return '該当なし'; END; /

関連するQ&A