2017-11-21 12 views
0

Oracleの一時テーブルがどこからデータを取得しているかを調べようとしています。このデータベースはCMSに接続されています。 CMSでレポートが実行されると、Oracleはレポートを生成するための一時表を作成することを理解しています。 Oracle SQLの開発者では、テーブル(空)を見つけて列名を見ることができます。しかし、データを生成するsqlを見ると、単に "column_name number(9,0)"のような列指定があります。依存関係を見ると、nameとreferenced_nameは同じで、型は同義語です。私はOracle SQL Developer環境をかなり新しく導入しています。グローバルテンポラリテーブルがOracle内のデータを取得するテーブル/カラムを見つけ出す

私の目標は、テーブルから生成されたレポートのデータを使用することですが、データがどこから来ているのかわからず、第三者がこれらのテーブルを作成してから私は現在、テーブル定義にアクセスできません。

ご協力いただければ幸いです。私が何かを明確にする必要がある場合は、私に知らせてください。おかげ

+1

GTTはビューのようではありません。アドホック・ベースで任意のコードでデータを取り込むことができるため、データ・ディクショナリからビューの問合せに対して取得できる静的テキストと同等のものはありません。あなたは幸運にも、 'v $ sql'の中にある文を見つけることができます。副次的な問題として、サードパーティのコードを効果的にリバースエンジニアリングすることが許されていますか? –

+0

Hey Alex Poole、私はレポートを生成するSQLを見ましたが、私が必要とする情報はtempテーブルから引き出されています(これは一時テーブルがその情報を取得しているかどうかわかりません)。 – Bolaji

+1

はい、しかし、tempテーブルがどんなものでも 'v $ sql'に移ってしまわない限り、OracleはそのGTTの観点からレコードを保持しません。おそらく、レポートには、それを設定するプロシージャまたは関数が呼び出されます。あなたは 'all_dependencies'を参照して、その参照を見つけることができるかどうかを調べることができます。 –

答えて

0

あなたはこれが2種類、取引の特定およびセッション固有であり、あなたのCisco ITPの初期導入

のリストを与える

select table_name from all_tables where temporary = 'Y'; 

してみてくださいでした。

GTTが取引固有のものである場合。つまり、ON DELETE行オプションを指定して作成すると、トランザクションがコミットされるとデータは削除されます。

セッション固有の場合。つまり、ONコミットPRESERVE行オプションで作成された場合、データはセッションが終了するまで保持されます。それまでクエリを実行することができます。

あなたはDBAのアクセスは、元のグローバル一時表の名前でGTTを置き換える

set long 20000 
select dbms_metadata.get_ddl('TABLE', 'GTT') from dual; 

で詳細を見つける持っている場合は、GTTにデータを置く人に理解しようとしている場合

しかし、あなたは試してみてください

SELECT * 
    FROM dba_dependencies 
WHERE referenced_name = 'GTT' 
    AND referenced_type = 'TABLE' 

OR

SELECT * 
    FROM dba_source 
WHERE UPPER(text) LIKE '%YOUR_GTT_NAME%'; 

また、GTTに直接問い合わせて、その中のデータを見つけ出し、ソースに戻ってトレースすることができます。

関連する問題