Как включить столбец USER_VIEWS.TEXT в предложении where - PullRequest
2 голосов
/ 04 апреля 2011

Кажется, что это должно было быть легко понять, но я изо всех сил пытаюсь найти какие-либо ответы.

Я хочу иметь возможность запрашивать таблицу USER_VIEWS в Oracle, чтобы найти другие представления, которыеиспользуя определенную таблицу.

Что-то вроде:

ВЫБЕРИТЕ имя_поиска, текст ОТ user_views ГДЕ текст LIKE '% MY_TABLE%'

Я получаю ошибку: ORA-00932: несовместимые типы данных: ожидаемый NUMBER получил LONG

Тип данных для TEXT - LONG, а в TOAD он показывает WIDEMEMO.

Я пытался привести его к to_char и объединить.Я попытался создать другую таблицу только с данными TEXT, и я получил ORA-00997: незаконное использование типа данных LONG.

Есть идеи?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

Технически, вы можете использовать пакет DBMS_METADATA, чтобы получить DDL для представления в CLOB, а затем проанализировать, что ищет ссылку на вашу таблицу. Но есть гораздо более простые решения, чем смотреть на определение представления.

Oracle хранит информацию об объектных зависимостях в представлении USER_DEPENDENCIES (или ALL_DEPENDENCIES или DBA_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, вы также можете делать более сложные вещи с деревом зависимых объектов. Если я создаю второе представление, которое зависит от первого, я легко вижу, что оба представления в конечном итоге используют базовую таблицу.

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
2 голосов
/ 04 апреля 2011

Нельзя использовать 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

0 голосов
/ 05 октября 2011

Если вы просто хотите увидеть его в таблице данных TOAD, вы можете включить предварительный просмотр:

Вид => Параметры жабы => Сетки данных => Данные => [x] Предварительный просмотр данных CLOB и LONG

Я использую TOAD 10.5.1.3

...