Oracle SQL - определить имена таблиц для последующего использования?

Я хотел знать, есть ли способ в SQL Oracle выполнить определение диапазона (например, в Excel). Например:

DEFINE TABLE1 = SELECT FIELD1, FIELD2, FIELD3 ИЗ [SCHEMA]. [TABLE0] [WHERE / GROUP BY / HAVING / ORDER BY / ...];

ОПРЕДЕЛЕНИЕ ТАБЛИЦЫ2 = ВЫБРАТЬ ПОЛЕ1, ПОЛЕ2, ПОЛЕ3 ИЗ ТАБЛИЦЫ1 [ГДЕ / ГРУППА ПО / ИМЕЮЩИЕ / ПОРЯДОК ПО / ...];

DEFINE TABLE3 = SELECT FIELD1, FIELD2, FIELD3 ИЗ TABLE2 LEFT JOIN TABLE1 ON [УСЛОВИЯ];

ВЫБРАТЬ * ИЗ ТАБЛИЦЫ3;

Заранее большое спасибо.


person Felipe Vidal Otero    schedule 30.12.2017    source источник
comment
Рассматривали ли вы общие табличные выражения (предложение WITH)?   -  person Steve    schedule 30.12.2017
comment
@Steve, я понимаю только следующую логику: WITH TABLE1 AS [структура таблицы], TABLE2 AS [структура таблицы] SELECT * FROM TABLE1 JOIN TABLE2; & это оно. Я не уверен, что за этим предложением стоит более сложная логика ...   -  person Felipe Vidal Otero    schedule 31.12.2017
comment
Немного сложно привести содержательный пример только с опубликованными вами абстрактными данными, но предложение with может содержать любой тип запроса выбора (включая использование предложений group-by и where). Логика может быть настолько сложной, насколько вам нужно - вы также можете связать ссылки на таблицы, чтобы содержимое одного CTE могло ссылаться на более ранний (т.е. TABLE2 мог выбирать или присоединяться к TABLE1, в вашем примере, с обоими определяется внутри предложения with).   -  person Steve    schedule 31.12.2017


Ответы (2)


Судя по вашим примерам, похоже, что вы хотите создать представления:

CREATE VIEW TABLE1 AS
SELECT FIELD1, FIELD2, FIELD3
FROM [SCHEMA].[TABLE0][WHERE/GROUP BY/HAVING/...];

CREATE VIEW TABLE2 AS
SELECT FIELD1, FIELD2, FIELD3
FROM TABLE1 [WHERE/GROUP BY/HAVING/...];

CREATE VIEW TABLE3 AS
SELECT FIELD1, FIELD2, FIELD3
FROM TABLE2
LEFT JOIN TABLE1 ON [CONDITIONS];

SELECT * FROM TABLE3;
person sstan    schedule 30.12.2017
comment
но вы не будете (я надеюсь) на самом деле вызывать представление table1, table2 или table3. Обычно представления присваиваются именам, чтобы вы знали, что они являются представлениями; например TABLE0_V1, TABLE0_V2, TABLE0_V3 и НИКОГДА не включайте ORDER BY в определение представления - person Paul Maxwell; 30.12.2017
comment
@Used: ... то же самое, что и стол я бы не назвал. Но что касается вашего мнения, я знаю, что часто можно увидеть представления с префиксом или суффиксом, чтобы идентифицировать их как таковые. Лично я считаю, что в этом нет необходимости. Но я абсолютно согласен с тем, что вам не нужен ORDER BY в определении представления. Отредактировано. - person sstan; 30.12.2017
comment
Рад, что мы договорились не использовать order by в просмотрах. Соглашение об именах IMHO тоже важно, особенно для тех, кто не знаком с моделью данных, однако дебаты по соглашениям об именах обычно непродуктивны :) - person Paul Maxwell; 30.12.2017
comment
@Used_By_Already - почему НИКОГДА НЕ включайте ORDER BY в определение представления? Что не так с этим? - person mathguy; 30.12.2017
comment
Видимо, это неактуально (по данным AskTom, здесь: asktom.oracle.com/pls/apex/), потому что (цитирование) перед оптимизацией запроса он проходит фазу, называемую преобразованием, где мы (Oracle) ищем способы переписать запрос, который потенциально может дать больше возможностей для оптимизации без изменения цели SQL. Итак, если оптимизатор обнаруживает, что ORDER BY представления не используется (или заменяется собственным ORDER BY SELECT), запрос преобразуется и ORDER BY не учитывается. - person Littlefoot; 30.12.2017
comment
Думаю, важно не начинать просмотр имен с 'TABLE';) - person William Robertson; 30.12.2017
comment
@littlefoot, несмотря на то, что оптимизатор может проигнорировать неиспользованный порядок by, слишком часто оптимизатор просто этого не делает, и стоимость нерелевантного порядка by видна в планах объяснения. Просто нет хорошего резонанса для определения порядка в представлении. Заказ следует оставить на усмотрение только последнего запроса. - person Paul Maxwell; 30.12.2017
comment
Привет @sstan, большое спасибо, это может быть полезно. || Только один вопрос: знаете ли вы какой-либо другой способ, который можно сделать только с привилегиями SELECT? База данных, которую я хочу пересмотреть, является производственной схемой, поэтому у меня нет других возможностей, кроме просмотра. - person Felipe Vidal Otero; 31.12.2017
comment
Если у вас есть только привилегия SELECT, лучшее, что вы можете сделать, это использовать предложение WITH, которое похоже на определение представления, но может быть повторно использовано только в том же запросе, где определено предложение WITH. - person sstan; 31.12.2017

ЧТОБЫ закрыть этот вопрос. Из одного из комментариев (Стив), что мне нужно, так это предложение WITH, поскольку у меня не было прав DDL.

Спасибо,

person Felipe Vidal Otero    schedule 25.10.2019