2

これは簡単に理解できるはずだったようですが、答えを見つけるのに苦労しています。

特定のテーブルを使用している他のビューを見つけるために、Oracle の USER_VIEWS テーブルに対してクエリを実行できるようにしたいと考えています。

何かのようなもの:

SELECT view_name, text FROM user_views WHERE text LIKE'%MY_TABLE%'

次のエラーが表示されます: ORA-00932: データ型に一貫性がありません: 期待される NUMBER が LONG になりました

TEXT のデータ型は LONG で、TOAD では WIDEMEMO を示します。

キャスト、to_char、および連結を試みました。TEXT データだけで別のテーブルを作成しようとしたところ、ORA-00997 が発生しました: LONG データ型の不正な使用。

何か案は?

ありがとう!

4

3 に答える 3

6

技術的には、DBMS_METADATAパッケージを使用してCLOB内のビューのDDLを取得し、それを解析してテーブルへの参照を探すことができます。ただし、ビューの定義を確認するよりもはるかに簡単な解決策があります。

Oracleは、ビュー内のオブジェクトの依存関係に関する情報を保持しUSER_DEPENDENCIESます(またはALL_DEPENDENCIESDBA_DEPENDENCIES特権レベルと、スキーマ間の依存関係を追跡しようとしているかどうかによって異なります)。これらのビューを使用する方がはるかに優れています

SQL> create table base_table (
  2    col1 number
  3  );

Table created.

SQL> create view my_view
  2  as
  3  select *
  4    from base_table;

View created.

SQL> select name, type
  2    from user_dependencies
  3   where referenced_name = 'BASE_TABLE';

NAME                           TYPE
------------------------------ ------------------
MY_VIEW                        VIEW

ビューを使用している場合はUSER_DEPENDENCIES、依存オブジェクトのツリーを使用してより高度な操作を行うこともできます。最初のビューに依存する2番目のビューを作成すると、両方のビューが最終的にベーステーブルを使用することが簡単にわかります。

SQL> create view my_view2
  2  as
  3  select *
  4    from my_view;

View created.

SQL> ed
Wrote file afiedt.buf

  1  select level, name, type
  2    from user_dependencies
  3  start with referenced_name = 'BASE_TABLE'
  4* connect by referenced_name = prior name
SQL> /

     LEVEL NAME                           TYPE
---------- ------------------------------ ------------------
         1 MY_VIEW                        VIEW
         2 MY_VIEW2                       VIEW
于 2011-04-04T19:36:09.747 に答える
2

LIKEをLONG列で使用することはできません。ただし、検索を実行するための独自のカスタム関数を作成することもできます。http://www.techonthenet.com/oracle/questions/long_value.phpを参照してください。 テーブルを作成して、LONG列をCLOB列に変換することもできます。

create table my_tab as
select to_lob(text) from user_views;

http://www.dba-oracle.com/oracle_news/2005_5_9_converting_long_lob_data_types.htmも参照してください。

于 2011-04-04T19:35:05.510 に答える
0

TOAD のデータグリッドで表示したいだけの場合は、プレビューをオンにすることができます。

View => Toad Options => Data Grids => Data => [x] CLOB および LONG データのプレビュー

TOAD 10.5.1.3 を使用しています

于 2011-10-05T09:58:25.420 に答える