Oracle sql получить список столбцов

Обновлено: 07.07.2024

Как запросить базу данных Oracle, чтобы отобразить имена всех таблиц в ней?

@MartinThoma Нету. попробовал сначала, прежде чем прибегнуть к Google

Это предполагает, что у вас есть доступ к представлению DBA_TABLES словаря данных. Если у вас нет этих привилегий, но они нужны, вы можете запросить, чтобы администратор БД явно предоставил вам привилегии для этой таблицы, или чтобы администратор БД предоставил вам SELECT ANY DICTIONARY привилегию или SELECT_CATALOG_ROLE роль (любая из которых позволит вам запросить любую таблицу словаря данных). ). Конечно, вы можете захотеть исключить определенные схемы, такие как SYS и SYSTEM имеющие большое количество таблиц Oracle, которые вам, вероятно, не нужны .

Кроме того, если у вас нет доступа DBA_TABLES , вы можете просмотреть все таблицы, к которым у вашей учетной записи есть доступ, через ALL_TABLES представление:

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

Если вас интересуют только те таблицы, которыми вы владеете, а не те, к которым у вас есть доступ, вы можете использовать USER_TABLES :

Поскольку он USER_TABLES содержит информацию только о тех таблицах, которыми вы владеете, у него нет OWNER столбца - владельцем по определению является вы.

Oracle также имеет ряд устаревших данных словаря views-- TAB , DICT , TABS и CAT для example-- , которые можно было бы использовать. В целом, я бы не советовал использовать эти устаревшие представления, если вам абсолютно не нужно перенести свои сценарии в Oracle 6. Oracle не изменяла эти представления в течение длительного времени, поэтому у них часто возникают проблемы с объектами более новых типов. Например, TAB и CAT представления, и представления показывают информацию о таблицах, которые находятся в корзине пользователя, в то время как [DBA|ALL|USER]_TABLES все представления отфильтровывают их. CAT также показывает информацию о материализованных журналах представлений с TABLE_TYPE «TABLE», что вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кто владеет объектом.

Основное средство для получения информации из базы данных — это запросы, то есть команда SELECT . Базовые возможности этой команды будут рассмотрены в этом разделе, другие, более сложные возможности — в следующих разделах. В каждом разделе будут указываться отличия по сравнению с аналогичными возможностями в Microsoft SQL Server .

Поскольку во всех главных базах данных поддерживается стандарт ANSI SQL , то базовые возможности и в Oracle , и в других базах данных ( Microsoft SQL Server , IBM DB 2, Informix , Sybase , Microsoft Access ) будут схожи. Отличия — в частностях, которые стандарт SQL не определяет, но которые довольно существенны, и которые могут привести к сложностям для пользователей, которые привыкли создавать запросы к другим базам данных.

Базовый синтаксис команды SELECT в Oracle выглядит следующим образом:

SELECT [ DISTINCT ] список_столбцов FROM источник WHERE фильтр ORDER BY выражение_сортировки

Приведем пример такого запроса :

SELECT employee_id, first_name, last_name, hire_date FROM hr.employees WHERE hire_date < '01.01.2000' ORDER BY last_name

Как мы видим, пока в запросе не используются специальные возможности, он выглядит абсолютно стандартным и полностью идентичен аналогичным запросам, например, в SQL Server . Если нам нужно выбрать все столбцы из базы данных или представления, мы можем указать вместо списка столбцов звездочку:

SELECT * FROM hr.employees WHERE hire_date < '01.01.2000' ORDER BY last_name

Выводимое имя столбца можно поменять при помощи псевдонима ( alias ). Для этого достаточно просто написать имя пседвонима сразу после названия столбца или использовать ключевое слово AS (оба синтаксиса полностью равнозначны):

SELECT last_name Фамилия FROM hr.employees

SELECT last_name AS Фамилия FROM hr.employees

Особенно удобно использовать псевдонимы для вычисляемых столбцов, для которых изначально имя не предусмотрено:

SELECT last_name AS Фамилия, salary*12 AS "Зарплата за год" FROM hr.employees

Если в псевдониме используются пробелы или какие-то служебные символы, то такой псевдоним нужно поместить в двойные кавычки.

Отметим и некоторые особенности, связанные со списком столбцов в Oracle . Если в SQL Server "проблемные" имена столбцов (с пробелами и зарезервированными словами) можно было помещать в квадратные скобки (а обычно и в двойные кавычки — в зависимости от настроек сеанса), то в Oracle и тот, и другой вариант вызовет ошибку.

В список столбцов в Oracle можно включать литералы ( literals ). Литералы — это любое строковое значение, дата или число, которое помещается в список столбцов и при этом не является ни названием столбца, ни псевдонимом. Литералы будут повторяться для каждого возвращаемого столбца. Обычно они используются для создания пояснений в возвращаемом наборе результатов:

SELECT last_name AS Фамилия, 'Зарплата за год: ', salary*12 FROM hr.employees

В этом примере 'Зарплата за год: ' — это литерал, который будет выводиться для каждой записи.

Строковые литералы и литералы с датой должны заключаться в одинарные кавычки. Литералы в виде числовых значений в кавычки не помещаются.

Отметим, что литералы часто сливаются в выводимых результатах с возвращаемыми из базы данных значениями при помощи оператора конкатенации (||). Про операторы Oracle будет рассказываться в разделах 2.2, 2.3, 2.4.

При работе с литералами иногда возникает проблема, связанная с тем, что литерал сам по себе может содержать зарезервированный символ, например, одинарные кавычки. Oracle , в отличие, например, от SQL Server , позволяет пользователю самостоятельно определять символ, который будет использоваться в качестве кавычек. Выглядеть такое переопределение может. например, так:

select department _ name , q '[ It ' s assigned manager ID : ]' , manager _ id from departments

Попытка применить обычные одинарные кавычки для литерала приведет к ошибке, поскольку кавычка встречается внутри самого символьного значения литерала. Поэтому в этом примере в качестве кавычек выступают квадратные скобки.

Отметим некоторые особенности применения оператора q ':

  • можно использовать как строчную букву q , так и заглавную (Q) ;
  • после q должна идти обычная одинарная кавычка. Следующая одинарная кавчка определяет завершение области действия оператора q ;
  • сразу после одинарной кавычкой должен идти символ, выбранный пользователем для применения в качестве кавычек. Этот символ может быть любым, за исключением пробела, перевода строки или табуляции (в том числе и одинарная кавычка). Если пользователь выбрал символ (, , ] и >. В других случаях закрытие кавычек производится при помощи того же символа, который использовался для их открытия.

И последний момент, связанный с базовым синтаксисом запросов. По умолчанию запрос возвращает из базы данных все значения, соответствующие параметрам запроса, даже если некоторые из возвращаемых значений будут полностью одинаковыми. Например, запрос

SELECT salary FROM hr . employees

вернет 107 строк, несмотря на то, что значительная часть значений будет повторяться.

Чтобы вернуть только уникальные значения (или наборы значений, если возвращается несколько столбцов), в запросе можно использовать ключевое слово DISTINCT :

SELECT DISTINCT salary FROM hr.employees

Такой запрос вернет уже 57 значений, при этом все значения будут уникальными.

Отличительной особенностью Oracle является то, что вместо DISTINCT можно использовать ключевое слово UNIQUE . SQL Server такого не позволяет.

У меня есть запрос mySQL для получения столбцов из таблицы следующим образом:

Как изменить указанный выше запрос в базе данных Oracle 11g? Мне нужно получить имена столбцов в качестве набора результатов для пользователей таблицы, исключая определенные столбцы, указав схему. Прямо сейчас у меня есть все таблицы в моем новом табличном пространстве, поэтому я указываю имя табличного пространства вместо имени схемы?

Также есть общий HQL для этого? В моей новой базе данных Oracle (я новичок в Oracle) у меня есть только имя табличного пространства, что эквивалентно имени схемы (логически?)

Табличное пространство не эквивалентно схеме, и вы не должны указывать имя табличного пространства.

Предоставление схемы/имени пользователя было бы ALL_TAB_COLS если вы хотите запросить ALL_TAB_COLS или DBA_TAB_COLS для таблиц столбцов таблицы, принадлежащих конкретному пользователю. в вашем случае, я бы предположил, что запрос будет выглядеть примерно так:

Обратите внимание, что при таком подходе вы рискуете инъекцией SQL.

EDIT: верхние имена table- и столбцов, поскольку они обычно имеют верхний регистр в Oracle; это только lower- или смешанный случай, если они созданы с двойными кавычками вокруг них.

Следующий запрос работал у меня в базе данных Oracle.

в оракуле вы можете использовать

для отображения всех столбцов, содержащихся в таблице пользователей

Запрос для использования с Oracle:

String sqlStr="select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='"+_db+".users' and COLUMN_NAME not in ('password','version','id')"

Я думаю, что табличное пространство не имеет ничего общего с схемой. Табличные пространства AFAIK в основном используются для логических внутренних технических целей, которые должны беспокоить администраторов баз данных. Дополнительные сведения о табличных пространствах см. В Oracle doc.

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

Я нахожу это полезным в Oracle:

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

Итак, просто вызов функции из запроса дает строку со всеми столбцами.

Примечание. LISTAGG завершится с ошибкой, если общая длина всех столбцов превышает символы 4000 , которые являются редкими. В большинстве случаев это будет работать.

Вы можете попробовать следующее:

Он будет возвращать все имена столбцов и типы данных

SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0; → Обратите внимание, что это результат запроса, ResultSet. Это можно экспортировать в другие форматы. И вы можете экспортировать результат запроса в Text формат. Экспорт выглядит, как SELECT * FROM SATURN.SPRIDEN WHERE ROWNUM = 0; ниже, когда я сделал SELECT * FROM SATURN.SPRIDEN WHERE ROWNUM = 0; :

DESCRIBE <TABLE_NAME> → Примечание. Это вывод скрипта.

дело в том, что в toad u нужно написать капитал имен таблиц, например:

Вы можете использовать приведенный ниже запрос, чтобы получить список имен таблиц, который использует определенный столбец в DB2:

В данной заметке будет рассмотрено несколько способов получения информации о столбцах таблицы в базе данных Microsoft SQL Server, например, мы научимся получать список колонок таблицы, включая их тип данных, с помощью SQL запроса.

Список и описание колонок таблицы

Начну с того, что если Вам нужно просто визуально посмотреть, какие колонки или какой тип данных у той или иной колонке в таблице, то Вы для этого можете использовать графический функционал SQL Server Management Studio, а именно «Обозреватель объектов». Например, для того чтобы посмотреть информацию о столбцах таблицы, необходимо плюсиком открыть соответствующий контейнер.

Скриншот 1

Но если Вам необходимо выгрузить эту информацию или обработать ее в SQL инструкции, то в этом случае необходимо обращаться к системным объектам SQL Server с помощью языка SQL, как и к каким именно объектам обращаться мы сейчас и рассмотрим.

Примечание! Все примеры ниже мы будем рассматривать в Microsoft SQL Server 2016 Express. В базе данных создана тестовая таблица TestTable, она имеет всего три столбца.

Получаем список колонок таблицы с помощью представления информационной схемы

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

Скриншот 2

Получаем список столбцов таблицы с помощью системного представления sys.columns

Также информацию о колонках таблицы можно получить с помощью системного представления sys.columns, но только в этом случае для получения точно такого же результата, как был выше, необходимо будет объединять несколько системных представлений, а именно sys.tables, sys.columns и sys.types, так как в представлении sys.columns есть только идентификаторы нужных нам данных.

Скриншот 3

Получаем список колонок таблицы с помощью системной процедуры sp_columns

В SQL Server существует специальная системная процедура sp_columns, которая как раз и предназначена для получения информации о колонках таблицы.

Скриншот 4

Какой из рассмотренных выше способов Вам подойдет и окажется удобней решать Вам, а у меня на этом все, удачи!

Заметка! Новичкам рекомендую посмотреть мой видеокурс по T-SQL для начинающих, с помощью него Вы «с нуля» научитесь работать с SQL и программировать на T-SQL.

Читайте также: