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

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

Добро пожаловать в Голливуд. Представляю вам сегодняшних героинь

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

Создадим и заполним базовую таблицу

ID Актриса Мужья
1 Анджелина Джоли Джонни Ли Миллер, Билли Боб Торнтон, Брэд Питт
2 Шарлиз Терон
3 Пенелопа Крус Хавьер Бардем

Из таблицы видно, что Анжелика была замужем трижды. Ее мужья перечислены в колонке через разделитель в порядке очередности их бракосочетания с актрисой. Условимся, что разделитель — это запятая, а пробел после нее — просто мусор.

Лиза Терон вообще ни разу не была замужем (гражданские браки не в счет), и она, по всей видимости, до сих пор ждет своего айтишника. Так что следует взять это на заметку и как следует поторопиться — даме уже, без малого, 40.

Ну и Пенелопа Крус — замужем всего один раз. Какая скука.

Но это все прелюдия, а на деле нужно получить следующий результат

Актриса Муж Номер мужа п/п
Анджелина Джоли Джонни Ли Миллер 1
Анджелина Джоли Билли Боб Торнтон 2
Анджелина Джоли Брэд Питт 3
Шарлиз Терон
Пенелопа Крус Хавьер Бардем 1

По сути надо выполнить операцию, обратную группировке и агрегации функцией listagg.

Будем двигаться от простого к сложному. Для начала предлагаю рассмотреть похожую задачу — извлечение чисел из одиночной строки с разделителем в табличный набор.

Получаем:

OK
10
20
30
40
50
100

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

  • Генерируются новые строки с помощью connect by level.
  • Через regexp_count вычисляется количество чисел в строке между разделителями – это количество определяет верхнюю границу для генератора строк.
  • С помощью regexp_substr извлекаются числа из строки. Номер вхождения шаблона в строку (4-й аргумент регулярки) соответствует значению псевдостолбца rownum — номер п/п сгенерированной строки. Вместо rownum можно было использовать и level, результат был бы аналогичным.
Читайте также:  Правила безопасности общения в интернете

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

В таблице HOLLYWOOD мы имеем дело не с последовательностью чисел, а с именами знатных мужей. Но их можно также подсчитать с помощью функции regexp_count и извлекать, используя функцию regexp_substr, согласно вышеописанной методе. Теперь нужно вспомнить рецепты маринования бананов и выбрать один из способов генерации строк, когда известно их будущее количество. Для примеров я воспользуюсь 3-м и 5-м способом. Но при выборе наиболее оптимального метода генерации нужно обратить внимание на коммент пользователя xtender.

Объединив подходы, получаем следующее.

Всё ОК – девушки счастливы в браках. Все, кроме Лизы Терон. Для таких, как Лиза, в запросе я использовал nvl2.

Спецэффект № 2.
Это было решение через коллекции.

UPD: Нарисовался еще один замечательный Спецэффект № 3 для Oracle 12c

Очевидно, что вариантов решения задачи существует немало. Выбор того или иного варианта – дело вкуса и вопрос производительности. Если бы у меня был Оскар, я бы его не задумываясь вручил тому, кто предложит наиболее лаконичный с точки зрения кода и наиболее оптимальный с точки зрения производительности способ.

на Oracle SQL Developer, если я просматриваю информацию в таблице, я могу просмотреть ограничения, которые позволяют мне видеть внешние ключи (и, следовательно, на какие таблицы ссылается эта таблица), и я могу просмотреть зависимости, чтобы увидеть, какие пакеты и такие ссылки на таблицу. Но я не уверен, как найти, какие таблицы ссылаются на таблицу.

например, скажем, я смотрю на emp таблица. Есть еще одна таблица emp_dept который захватывает, какие сотрудники работают в каких отделах, которые ссылаются на emp в таблице emp_id первичный ключ emp таблица. Есть ли способ (через некоторый элемент пользовательского интерфейса в программе, а не через SQL) найти, что emp_dept таблица ссылок emp таблица, без меня, чтобы знать, что таблицы?

Читайте также:  Посоветуйте игру на пк для девушки

7 ответов

нет. В Oracle SQL Developer нет такой опции.

вы должны выполнить запрос вручную или использовать другой инструмент (к примеру разработчик PLSQL есть такая опция). Следующий SQL-это тот, который используется разработчиком PLSQL:

здесь r_owner — Это схема, и r_table_name — это таблица, для которой вы ищете ссылки. Имена чувствительны к регистру

будьте осторожны, потому что на вкладке Отчеты Oracle SQL Разработчик есть опция "Все таблицы / зависимости" это от ALL_DEPENDENCIES что относится к"зависимости между процедурами, пакетами, функциями, телами пакетов и триггерами, доступными текущему пользователю, включая зависимости от представлений, созданных без ссылок на базы данных.". Тогда этот отчет не имеет значения для вашего вопроса.

чтобы добавить это в SQL Developer в качестве расширения, выполните следующие действия:

  1. сохраните приведенный ниже код в xml-файл (например, fk_ref.XML-код):

    добавьте расширение в SQL Developer:

    • Инструменты > Предпочтения
    • База Данных > Пользовательские Расширения
    • Нажмите кнопку "добавить строку"
    • в типе выберите "редактор", место, где вы сохранили xml-файл выше
    • Нажмите " Ok" затем перезапустите SQL Developer

    перейдите к любой таблице, и теперь вы должны увидеть дополнительную вкладку рядом с SQL one, помеченную FK References, которая отображает новую информацию FK.

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

    19 ответов

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

    Читайте также:  Клавиатура компьютера раскладка клавиши фото

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

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

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

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

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

    Запрос user_tables и dba_tables не работал.
    Это было сделано:

    Ссылка на основную публикацию
    Снять пароль с роутера tp link
    Домашняя беспроводная сеть Wi-Fi должна быть защищена паролем. Но ведь бывают разные случаи, скажете вы. Например, вы хотите пригласить друзей...
    Скопировать контакты с андроид на компьютер
    Мы уже рассказывали о том, как скопировать контакты со смартфона на смартфон. Но иногда проще перебросить контактную книгу на компьютер....
    Скопировать строку таблицы значений 1с в другую
    Не претендуя на полноту описания функций и методов работы с таблицей значений 1с привожу некоторые аспекты, которые в своё время...
    Снять пароль с макроса excel
    Здравствуйте, друзья! Последние дни бился над такой задачей: Имеется файл .xls, в нем макрос на VBA, защищенный паролем. Файл создается...
    Adblock detector