получить список всех таблиц в oracle?

<p>как запросить базу данных oracle, чтобы отобразить имена всех таблиц в ней?</p>

<pre><code>select owner, table\_name from dba\_tables </code></pre><p>это предполагает, что у вас есть доступ к представлению словаря данных <code>dba\_tables</code>. если у вас нет этих привилегий, но они нужны, вы можете запросить, чтобы администратор бд явно предоставил вам привилегии для этой таблицы или чтобы администратор бд предоставил вам привилегию <code>select any dictionary</code> или роль <code>select\_catalog\_role</code> (любая из которых позволит вам запрашивать любые данные словарь таблицы). конечно, вы можете захотеть исключить определенные схемы, такие как <code>sys</code> и <code>system</code>, которые содержат большое количество таблиц oracle, которые, вероятно, вас не интересуют.</p><p>кроме того, если у вас нет доступа к <code>dba\_tables</code>, вы можете просмотреть все таблицы, к которым у вашей учетной записи есть доступ, через представление <code>all\_tables</code>:</p><pre><code>select owner, table\_name from all\_tables </code></pre><p>хотя это может быть подмножеством таблиц, доступных в базе данных (<code>all\_tables</code> отображает информацию обо всех таблицах, к которым у вашего пользователя есть доступ). </p><p>если вас интересуют только те таблицы, которыми вы владеете, а не те, к которым у вас есть доступ, вы можете использовать <code>user\_tables</code>:</p><pre><code>select table\_name from user\_tables </code></pre><p>поскольку <code>user\_tables</code> содержит информацию только о тех таблицах, которыми вы владеете, у него нет столбца <code>owner</code> - владельцем по определению является вы.</p><p>oracle также имеет ряд устаревших представлений словаря данных, например, <code>tab</code>, <code>dict</code>, <code>tabs</code> и <code>cat</code>, которые можно использовать. в общем, я бы не советовал использовать эти устаревшие представления, если только вам абсолютно не нужно перенести свои сценарии в oracle 6. oracle не изменяла эти представления в течение длительного времени, поэтому у них часто возникают проблемы с объектами более новых типов. например, представления <code>tab</code> и <code>cat</code> показывают информацию о таблицах, которые находятся в корзине пользователя, в то время как представления <code>[dba|all|user]\_tables</code> фильтруют их. <code>cat</code> также показывает информацию о материализованных журналах представления с <code>table\_type</code> «table», что вряд ли будет тем, что вы действительно хотите. <code>dict</code> объединяет таблицы и синонимы и не говорит вам, кому принадлежит объект.</p>

<p>запросы <code>user\_tables</code> и <code>dba\_tables</code> не работали.<br> этот сделал: </p><pre><code>select table\_name from all\_tables </code></pre>

<p>если пойти еще дальше, есть еще одно представление с именем cols (all\_tab\_columns), которое можно использовать для определения того, какие таблицы содержат данное имя столбца.</p><p>например:</p><pre><code>select table\_name, column\_name from cols where table\_name like 'est%' and column\_name like '%callref%'; </code></pre><p>найти все таблицы, имена которых начинаются с est, и столбцы, содержащие callref, где-нибудь в их именах.</p><p>это может помочь при определении, к каким столбцам вы хотите присоединиться, например, в зависимости от вашей таблицы и соглашений об именах столбцов.</p>

<h2>для лучшего просмотра с <code>sqlplus</code></h2><p>если вы используете <code>sqlplus</code>, вы можете сначала настроить несколько параметров для более приятного просмотра, если ваши столбцы искажаются (эти переменные не должны сохраняться после выхода из сеанса <code>sqlplus</code>):</p><pre><code>set colsep '|' set linesize 167 set pagesize 30 set pagesize 1000 </code></pre><h2>показать все таблицы</h2><p>затем вы можете использовать что-то вроде этого, чтобы увидеть все имена таблиц:</p><pre><code>select table\_name, owner, tablespace\_name from all\_tables; </code></pre><h2>показать свои таблицы</h2><p>как упоминает @justin cave, вы можете использовать это для отображения только тех таблиц, которые у вас есть:</p><pre><code>select table\_name from user\_tables; </code></pre><h2>не забывайте о видах</h2><p>имейте в виду, что некоторые «таблицы» на самом деле могут быть «представлениями», поэтому вы также можете попробовать выполнить что-то вроде:</p><pre><code>select view\_name from all\_views; </code></pre><h2>результаты, достижения</h2><p>это должно привести к тому, что выглядит довольно приемлемо, как:</p><p><img src="https://i.stack.imgur.com/s0hb5.png" alt="result"></p>

<p>простой запрос для выбора таблиц для текущего пользователя:</p><pre><code> select table\_name from user\_tables; </code></pre>

<pre><code> select object\_name from user\_objects where object\_type='table'; </code></pre><p>----------------или же------------------</p><pre><code> select * from tab; </code></pre><p>----------------или же------------------</p><pre><code> select table\_name from user\_tables; </code></pre>

<p>попробуйте следующие представления словаря данных.</p><pre><code>tabs dba\_tables all\_tables user\_tables </code></pre>

<p>существует 3 данных для этого </p><p><strong> dba\_tables описывает все реляционные таблицы в базе данных. </strong></p><pre><code>select owner, table\_name from dba\_tables </code></pre><p><strong> описание реляционных таблиц, доступных пользователю </strong></p><pre><code>select owner, table\_name from all\_tables </code></pre><p><strong> user\_tables </strong>описывает реляционные таблицы, принадлежащие текущему пользователю. в этом представлении не отображается столбец<strong>владелец</strong>.</p><pre><code>select table\_name from user\_tables </code></pre>

<p>попробуйте выбрать из <a href="http://download.oracle.com/docs/cd/b28359\_01/server.111/b28320/statviews\_5443.htm#refrn26286">user\_tables</a> , где перечислены таблицы, принадлежащие текущему пользователю.</p>

<p>с любым из них вы можете выбрать:</p><pre><code>select distinct owner, object\_name from dba\_objects where object\_type = 'table' and owner='some\_schema\_name'; select distinct owner, object\_name from all\_objects where object\_type = 'table' and owner='some\_schema\_name'; </code></pre>

<pre><code>select * from dba\_tables </code></pre><p>выдает все таблицы всех пользователей, только если пользователь, с которым вы вошли в систему, имеет привилегии <code>sysdba</code>.</p>

<p>база данных oracle для отображения имен всех таблиц, используя запрос ниже</p><pre> select владелец, имя\_таблицы from dba\_tables; select владелец, имя\_таблицы from all\_tables; select имя\_таблицы from user\_tables;</pre><p>более подробно: <a href="http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html">http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html</a> </p>

<p>мы можем получить все таблицы, включая детали столбцов, из запроса ниже:</p><pre><code>select * from user\_tab\_columns; </code></pre>

<p>в том числе просмотров:</p><pre><code>select owner, table\_name as table\_view from dba\_tables union all select owner, view\_name as table\_view from dba\_views </code></pre>

<p>вы можете использовать <a href="https://docs.oracle.com/cd/b10501\_01/server.920/a96524/c05dicti.htm">oracle data dictionary</a> , чтобы получить информацию об объектах oracle.</p><p>вы можете получить список таблиц различными способами:</p><pre><code>select * from dba\_tables </code></pre><p>или например:</p><pre><code>select * from dba\_objects where object\_type = 'table' </code></pre><p>затем вы можете получить столбцы таблицы, используя имя таблицы:</p><pre><code>select * from dba\_tab\_columns </code></pre><p>затем вы можете получить список зависимостей (триггеры, представления и т.д.):</p><pre><code>select * from dba\_dependencies where referenced\_type='table' and referenced\_name=:t\_name </code></pre><p>затем вы можете получить текстовый источник этих объектов:</p><pre><code>select * from dba\_source </code></pre><p>и вы можете использовать <code>user</code> или <code>all</code> представления вместо <code>dba</code>, если хотите.</p>

<p>ниже приведен закомментированный фрагмент sql-запросов, описывающий, как можно использовать параметры:</p><pre><code>-- need to have select catalog role select * from dba\_tables; -- to see tables of your schema select * from user\_tables; -- tables inside your schema and tables of other schema which you possess select grants on select * from all\_tables; </code></pre>

<p>я не нашел ответа, который указывал бы на использование </p><pre><code>dba\_all\_tables (all\_all\_tables/user\_all\_tables) </code></pre><p>поэтому решил добавить и мою версию . это представление фактически возвращает больше, чем dba\_tables, так как оно также возвращает таблицы объектов ( <a href="http://docs.oracle.com/cd/e11882\_01/server.112/e40402/statviews\_1003.htm">http://docs.oracle.com/cd/e11882\_01/server.112/e40402/statviews\_1003 .htm</a> ).</p>

<p>новая функция, доступная в <a href="https://www.oracle.com/in/database/technologies/appdev/sqlcl.html"><strong> sqlcl </strong></a> (это бесплатный интерфейс командной строки для oracle database):</p><p><strong><code>tables</code></strong>псевдоним.</p><p>вот несколько примеров, показывающих использование и дополнительные аспекты функции. сначала подключитесь к сеансу командной строки <code>sql</code> (<code>sql.exe</code> в windows). рекомендуется вводить эту конкретную команду sqlcl перед выполнением любых других команд или запросов, которые отображают данные.</p><pre><code>sql> set sqlformat ansiconsole -- resizes the columns to the width of the -- data to save space </code></pre><p><strong><code>sql> tables</code></strong></p><pre><code>tables ----------- regions locations departments jobs employees job\_history .. </code></pre><p>чтобы узнать, на что ссылается псевдоним <code>tables</code>, вы можете просто использовать <code>alias list <alias></code></p><pre><code>sql> alias list tables tables - tables <schema> - show tables from schema -------------------------------------------------- select table\_name "tables" from user\_tables </code></pre><p>вам не нужно определять этот псевдоним, так как он используется по умолчанию в sqlcl. если вы хотите получить список таблиц из определенной схемы, используя новый пользовательский псевдоним и передавая имя схемы в качестве аргумента привязки с отображением только набора столбцов, вы можете сделать это, используя</p><p><strong><code>sql> alias tables\_schema = select owner, table\_name, last\_analyzed from all\_tables where owner = :ownr;</code></strong></p><p>после этого вы можете просто передать имя схемы в качестве аргумента.</p><p><strong><code>sql> tables\_schema hr</code></strong></p><pre><code>owner table\_name last\_analyzed hr dummy1 18-10-18 hr yourtab2 16-11-18 hr yourtable 01-12-18 hr id\_table 05-12-18 hr regions 26-05-18 hr locations 26-05-18 hr departments 26-05-18 hr jobs 26-05-18 hr employees 12-10-18 .. .. </code></pre><p>более сложный предопределенный псевдоним известен как<strong><code>tables2</code></strong>, который отображает несколько других столбцов.</p><pre><code>sql> tables2 tables ====== table\_name num\_rows blocks unformatted\_size compression index\_count constraint\_count part\_count last\_analyzed an\_ip\_table 0 0 0 disabled 0 0 0 > month parttable 0 0 0 1 0 1 > month tst2 0 0 0 disabled 0 0 0 > month tst3 0 0 0 disabled 0 0 0 > month manage\_emplyee 0 0 0 disabled 0 0 0 > month product 0 0 0 disabled 0 0 0 > month all\_tab\_x78ehryfk 0 0 0 disabled 0 0 0 > month tbw 0 0 0 disabled 0 0 0 > month dept 0 0 0 disabled 0 0 0 > month </code></pre><p>чтобы узнать, какой запрос выполняется в фоновом режиме, введите</p><pre><code>alias list tables2 </code></pre><p>это покажет вам немного более сложный запрос вместе с предопределенными определениями <code>column</code>, обычно используемыми в sql * plus.</p><p><em>джефф смит</em> объясняет больше об псевдонимах <a href="https://www.thatjeffsmith.com/archive/2015/11/object-search-in-sqlcl/"><strong> здесь </strong></a> </p>

<p>я искал список всех имен столбцов, принадлежащих таблице схемы, отсортированный по порядку идентификатора столбца.</p><p>вот запрос, который я использую: -</p><pre><code>select column\_name from all\_tab\_columns where owner = 'schema\_owner\_username' and table\_name='table\_name' order by column\_id asc; </code></pre>

<p>следующий запрос только перечисляет необходимые данные, тогда как другие ответы дали мне дополнительные данные, которые только смутили меня.</p><pre><code>select table\_name from user\_tables; </code></pre>