Как перечислить ТОЛЬКО таблицы, которые я создал в Oracle SQL? - PullRequest
0 голосов
/ 24 мая 2018

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

SELECT owner, table_name
  FROM dba_tables`

или

SELECT table_name
  FROM user_tables

Но я всегда заканчиваю несколькими тысячами результатов. Рис после выполнения первой команды

SELECT owner, table_name
  FROM dba_tables

По сути, я создал около 15 таблиц с тех пор, как начал использовать SQL Plus, и забыл некоторые имена.Я хотел бы иметь возможность проверить только те таблицы, которые я создал, без нескольких тысяч ненужных других имен там.Кто-нибудь знает, как это сделать?Я добавлю, что я использую пользователя SYSTEM и oracle express.

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Прежде всего, вам следует прекратить использование учетной записи SYSTEM.Это только для базы данных Oracle.Создайте и используйте нового пользователя базы данных, и вы избавите себя от многих головных болей, которые хуже вашей текущей.

Чтобы решить текущую проблему, вы хотите отфильтровать «тысячи таблиц», которыми владеет SYSTEMиз коробки.(Я принимаю ваше слово, что это тысячи - я никогда их не считал).

Одна идея была бы такой:

SELECT object_name
FROM   dba_objects
WHERE  object_type = 'TABLE'
AND    owner = 'SYSTEM'
AND    created >= to_date('01-JAN-2018','DD-MON-YYYY')

... замена 01-JAN-2018 надата, когда вы начали использовать SQL * Plus, который , мы надеемся, не был в тот же день, когда была установлена ​​база данных (иначе это может не сработать)!

0 голосов
/ 24 мая 2018

Что @ matthew-mcpeak сказал выше - ВЫЙТИ ИЗ ИСПОЛЬЗОВАНИЯ СИСТЕМЫ.

После того, как вы создали правильную схему, содержащую ваши объекты, вы можете запросить USER_TABLES.Предложение WHERE не требуется: это ПРОСМОТР ТАБЛИЦ в схеме, принадлежащей вашей учетной записи пользователя SESSION.

Поэтому войдите в систему как PETE, запрос

 SELECT * FROM USER_TABLES

Покажет каждую таблицу вСхема PETE.

или

select *
  from ALL_OBJECTS
 where OBJECT_TYPE = 'TABLE'
   and OWNER = 'PETE';

или запрос

 SELECT * FROM ALL_TABLES where owner = 'PETE'

У нас также есть представления DBA_, такие как DBA_TABLES и DBA_OBJECTS.Они работают быстрее, чем представления ALL_, потому что модель безопасности отсутствует.Просмотры ALL_ показывают только то, что вы можете видеть.Поэтому, если у вас есть доступ к представлениям DBA_, используйте их.

Но если вы просто хотите увидеть, что находится в вашей схеме, представления USER_ просто великолепны.

Однако.

Это не покажет вам каждую таблицу, которую вы создали.Например, как насчет всех тех таблиц, которыми вы загрязнили схему SYSTEM?

Словарь данных Oracle не отслеживает, кто что создал.Вам понадобится AFTER CREATE TRIGGER для захвата владельца сеанса каждый раз, когда запускается CREATE TABLE, и его запись в новую таблицу для создания отчетов.Или включите аудит в своей системе и позвольте этому позаботиться об этом.ORACLE-BASE (Тим) демонстрирует, что здесь .

0 голосов
/ 24 мая 2018

Если вы знаете какую-либо из созданных вами таблиц, сделайте запрос следующим образом:

select owner,table_name from user_tables where table_name='NAME OF YOUR TABLE';

Затем вы можете изменить запрос на:

select owner, table_name  from user_tables where ower='THE OWNER OF THE TABLE YOU SELECTED BEFORE'

Это должновернуть только таблицы, созданные вами.owner может быть вашим именем пользователя, но я не уверен, поскольку у меня нет опыта работы с Oracle, и я никогда не пробовал ничего подобного, но мне кажется логичным, что это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...