つまり、キーワードがどのテーブルのどのカラムに格納されているか分からないという状況なのです。
よろしくお願いします。
まだ受け付けているようなので、スクリプトを書いてみました
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のところを探したい文字列に置き換えてみてください
DBの設計を見直すべきだとは思いますが、どうしてもということであれば、動的SQLでテーブル一覧、カラム一覧を追加する方法が考えられます。
テーブル一覧をFROMに追加していき、取得されたテーブルのカラムを条件に入れていけば実現できると思いますが・・・
本質的にはそのような検索が必要な設計をしないのがいいと思います。
DBの設計を見直すべきだとは思いますが、どうしてもということであれば、動的SQLでテーブル一覧、カラム一覧を追加する方法が考えられます。
テーブル一覧をFROMに追加していき、取得されたテーブルのカラムを条件に入れていけば実現できると思いますが・・・
本質的にはそのような検索が必要な設計をしないのがいいと思います。
>http://q.hatena.ne.jp/1148519767
前回の質問からの継続の質問と思われますが
一度全体像を把握するために、
Oracle Enterprise Managerはインストール
されてないのでしょうか?
ご希望の内容以外でも作成されたリソース等
を確認できると思います。
システムの全体像を見てはどうでしょうか?
http://www.oracle.co.jp/database/manageability/function.html
客先のシステムのためすぐに確認ができませんが、あるかもしれません。ただ、EnterpriseManagerで質問のような操作が可能でしょうか?
訂正 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
まだ受け付けているようなので、スクリプトを書いてみました
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のところを探したい文字列に置き換えてみてください
いえ、他人のアプリを解析する必要があって、その製作者と連絡が取れないという状況なのです。