Oracleで、すべてのテーブル(dba_tablesのテーブルすべて)のすべてのカラムに対して1回で検索を実行する方法は存在しますか?

つまり、キーワードがどのテーブルのどのカラムに格納されているか分からないという状況なのです。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/06/01 16:12:22
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kill_p No.5

回答回数68ベストアンサー獲得回数3

ポイント55pt

まだ受け付けているようなので、スクリプトを書いてみました

Oracle 9 で動くと思います。

SET SERVEROUTPUT ON SIZE 30000

DECLARE

WK_SQL VARCHAR2(1000); -- 動的SQL格納用

TYPE TYPE_CUR_VALUE IS REF CURSOR;

CUR_VALUE TYPE_CUR_VALUE;

WK_VALUE VARCHAR2(1000);

/* TABLE取得カーソル */

CURSOR CUR_TABLE_DEF IS

SELECT UT.TABLE_NAME TNAME, UT.COLUMN_NAME CNAME

FROM USER_TAB_COLUMNS UT, TAB

WHERE UT.TABLE_NAME = TAB.TNAME

AND TAB.TABTYPE = 'TABLE'

;

BEGIN

FOR CUR_TABLEGET IN CUR_TABLE_DEF LOOP

IF TRIM(CUR_TABLEGET.CNAME) IS NULL THEN

NULL;

ELSE

WK_SQL := ' SELECT '

|| CUR_TABLEGET.CNAME

|| ' FROM '

|| CUR_TABLEGET.TNAME

|| ' WHERE '

|| CUR_TABLEGET.CNAME || ' LIKE ' || '''%xxxx%'''

;

DBMS_OUTPUT.PUT_LINE( 'SQL:' || WK_SQL );

OPEN CUR_VALUE FOR WK_SQL;

FETCH CUR_VALUE INTO WK_VALUE;

CLOSE CUR_VALUE;

DBMS_OUTPUT.PUT_LINE( CUR_TABLEGET.TNAME || ',' || CUR_TABLEGET.CNAME || ',"' || WK_VALUE || '"');

END IF;

END LOOP;

END;

/

途中のxxxxのところを探したい文字列に置き換えてみてください

その他の回答4件)

id:kill_p No.1

回答回数68ベストアンサー獲得回数3

ポイント20pt

DBの設計を見直すべきだとは思いますが、どうしてもということであれば、動的SQLでテーブル一覧、カラム一覧を追加する方法が考えられます。

テーブル一覧をFROMに追加していき、取得されたテーブルのカラムを条件に入れていけば実現できると思いますが・・・

本質的にはそのような検索が必要な設計をしないのがいいと思います。

id:TEKKAMEN

いえ、他人のアプリを解析する必要があって、その製作者と連絡が取れないという状況なのです。

2006/05/29 18:33:57
id:kill_p No.2

回答回数68ベストアンサー獲得回数3

ポイント15pt

DBの設計を見直すべきだとは思いますが、どうしてもということであれば、動的SQLでテーブル一覧、カラム一覧を追加する方法が考えられます。

テーブル一覧をFROMに追加していき、取得されたテーブルのカラムを条件に入れていけば実現できると思いますが・・・

本質的にはそのような検索が必要な設計をしないのがいいと思います。

id:kurukuru-neko No.3

回答回数1844ベストアンサー獲得回数155

ポイント5pt

>http://q.hatena.ne.jp/1148519767

前回の質問からの継続の質問と思われますが

一度全体像を把握するために、

Oracle Enterprise Managerはインストール

されてないのでしょうか?

ご希望の内容以外でも作成されたリソース等

を確認できると思います。

システムの全体像を見てはどうでしょうか?

http://www.oracle.co.jp/database/manageability/function.html

id:TEKKAMEN

客先のシステムのためすぐに確認ができませんが、あるかもしれません。ただ、EnterpriseManagerで質問のような操作が可能でしょうか?

2006/05/29 18:36:44
id:kurukuru-neko No.4

回答回数1844ベストアンサー獲得回数155

ポイント5pt

訂正 Oracle Enterprise Manager=管理ツール郡

>EnterpriseManagerで質問のような操作が可能でしょうか?

回答の意図と違う回答をあえてしています。

(ポイントは要りません)

Oracle Enterprise Manager=管理ツール郡

(Database Control)

を利用して、引継ぎが不完全である場合一度全体

像を見てはどうかと思ったのです。

現在調べている部分以外のユーザ、ロール(権限)、

インスタンス、ログ、View、ストアドプリシジャ、

Trigger,Index、Table等

データベースの内容は管理ツールで一通り見えるので

作業上の見積もりが出来るかと思ったわけです。

 http://www.oracle.co.jp/oracleworld/session/

 管理を為のものなので全てが出来るわけではないですが

バージョンにより違うのでOracle 7/8以上であれば

使えるレベルと思います。

 

 こんな感じです。

 http://www.geocities.jp/tweedamp2004/oracle/ora1_1.html


 

id:kill_p No.5

回答回数68ベストアンサー獲得回数3ここでベストアンサー

ポイント55pt

まだ受け付けているようなので、スクリプトを書いてみました

Oracle 9 で動くと思います。

SET SERVEROUTPUT ON SIZE 30000

DECLARE

WK_SQL VARCHAR2(1000); -- 動的SQL格納用

TYPE TYPE_CUR_VALUE IS REF CURSOR;

CUR_VALUE TYPE_CUR_VALUE;

WK_VALUE VARCHAR2(1000);

/* TABLE取得カーソル */

CURSOR CUR_TABLE_DEF IS

SELECT UT.TABLE_NAME TNAME, UT.COLUMN_NAME CNAME

FROM USER_TAB_COLUMNS UT, TAB

WHERE UT.TABLE_NAME = TAB.TNAME

AND TAB.TABTYPE = 'TABLE'

;

BEGIN

FOR CUR_TABLEGET IN CUR_TABLE_DEF LOOP

IF TRIM(CUR_TABLEGET.CNAME) IS NULL THEN

NULL;

ELSE

WK_SQL := ' SELECT '

|| CUR_TABLEGET.CNAME

|| ' FROM '

|| CUR_TABLEGET.TNAME

|| ' WHERE '

|| CUR_TABLEGET.CNAME || ' LIKE ' || '''%xxxx%'''

;

DBMS_OUTPUT.PUT_LINE( 'SQL:' || WK_SQL );

OPEN CUR_VALUE FOR WK_SQL;

FETCH CUR_VALUE INTO WK_VALUE;

CLOSE CUR_VALUE;

DBMS_OUTPUT.PUT_LINE( CUR_TABLEGET.TNAME || ',' || CUR_TABLEGET.CNAME || ',"' || WK_VALUE || '"');

END IF;

END LOOP;

END;

/

途中のxxxxのところを探したい文字列に置き換えてみてください

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • anktenの日記 2009-06-11 19:12:45
    <TITLE>Bookmarks</TITLE> Bookmarks CIM applet取説 FusionCharts Freeで簡単グラフ描画 ≫ TECH Matari fusioncharts ver3 FusionChartsで折れ線グラフ。 - NOBODYPLACE - MUTTER FusionChartsを日本語と共に使うときに気を
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません