人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Oracleで、すべてのテーブル(dba_tablesのテーブルすべて)のすべてのカラムに対して1回で検索を実行する方法は存在しますか?
つまり、キーワードがどのテーブルのどのカラムに格納されているか分からないという状況なのです。
よろしくお願いします。

●質問者: TEKKAMEN
●カテゴリ:コンピュータ
✍キーワード:Oracle いるか カラム キーワード 存在
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● キルP
●20ポイント

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

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

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

◎質問者からの返答

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


2 ● キルP
●15ポイント

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

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

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


3 ● kurukuru-neko
●5ポイント

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

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

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

Oracle Enterprise Managerはインストール

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

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

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

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

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

◎質問者からの返答

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


4 ● kurukuru-neko
●5ポイント

訂正 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



5 ● キルP
●55ポイント ベストアンサー

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

Oracle 9 で動くと思います。

SET SERVEROUTPUT ON SIZE 30000

DECLARE

WK_SQLVARCHAR2(1000);-- 動的SQL格納用

TYPE TYPE_CUR_VALUE IS REF CURSOR;

CUR_VALUETYPE_CUR_VALUE;

WK_VALUEVARCHAR2(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のところを探したい文字列に置き換えてみてください

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ