Подтвердить что ты не робот

Как получить комментарии к таблице через SQL в Oracle?

Я пробовал:

select * from user_tab_comments;

и он возвращает мне 3 столбца "TABLE_NAME", "TABLE_TYPE" и "КОММЕНТАРИИ", но столбец "TABLE_NAME" похож на "зашифрованный", мне нужны четкие имена таблиц:

TABLE_NAME                      TABLE_TYPE  COMMENTS

BIN$IN1vjtqhTEKcWfn9PshHYg==$0  TABLE       Résultat d'intégration d'une photo numérisée
BIN$PUwG3lb3QoazOc4QaC1sjw==$0  TABLE       Motif de fin d'agrément de maître de stage

Когда я использую "select * from user_tables"; TABLE_NAME не шифруется.

4b9b3361

Ответ 1

Поскольку 10g Oracle не сразу удаляет таблицы, когда мы выполняем инструкцию DROP TABLE. Вместо этого он переименовывает их следующим образом: BIN$IN1vjtqhTEKcWfn9PshHYg==$0 и помещает их в корзину. Это позволяет нам восстанавливать таблицы, которые мы не хотели удалять. Узнайте больше

Таблицы в корзине по-прежнему являются таблицами, поэтому они отображаются в ALL_TABLES и аналогичных представлениях. Поэтому, если вы хотите видеть только комментарии, относящиеся только к живым (не удаленным) таблицам, вам нужно отфильтровать по имени таблицы:

select * from all_tab_comments
where substr(table_name,1,4) != 'BIN$'
/

"Я не могу поверить, что нет столбца флага, поэтому вы можете сделать это, и is_recycled = 0 или что-то в этом роде".

Вы правы, это было бы невероятно. Итак, я проверил документацию, оказалось, что Oracle 10g добавил столбец с именем DROPPED в представления USER_/ALL_/DBA_TABLES.

select tc.* 
from all_tab_comments tc
     join all_tables t
     on tc.owner = t.owner
     and tc.table_name = t.table_name
where t.dropped = 'NO'
/

Ознакомьтесь с документацией. Очевидно, что необходимость присоединиться к представлению ALL_TABLES требует больше ввода, чем фильтрации по имени, поэтому в зависимости от наших потребностей может быть проще сохранить исходное предложение WHERE.

Ответ 2

ВЫБЕРИТЕ t.table_name, t.comments FROM USER_TAB_COMMENTS t WHERE TABLE_NAME = 'SS_DEPT';