Проверка наличия логической сущности
Содержание раздела
При успешном создании любой сущности — логической базы данных, логической таблицы, логического представления, внешней таблицы загрузки, внешней таблицы выгрузки или материализованного представления — система возвращает пустой объект ResultSet в ответе на соответствующий запрос. Если сущность не удалось создать из-за ошибки, система возвращает исключение в ответе. Таким образом, по результатам выполнения запроса можно определить, создалась ли нужная сущность. Однако при необходимости можно проверить ее наличие, как описано в этом разделе.
Проверить наличие логической сущности можно несколькими способами:
- запросить метаданные логической схемы данных, выполнив запрос к соответствующему системному представлению (способ недоступен для внешних таблиц);
- выполнить SELECT-запрос к логической сущности (способ недоступен для логической БД и внешних таблиц);
- проверить дерево объектов в SQL-клиенте.
Примеры запросов для каждой из сущностей приведены в секциях ниже:
- Проверка наличия логической базы данных;
- Проверка наличия логической таблицы;
- Проверка наличия логического представления;
- Проверка наличия материализованного представления;
- Проверка наличия внешней таблицы.
Примечание: наличие внешних таблиц загрузки и выгрузки можно проверить только в дереве объектов SQL-клиента. Внешние таблицы не отображаются в системных представлениях, и для них недоступны SELECT-запросы.
Проверка наличия логической базы данных
Чтобы проверить наличие логической базы данных, используйте любой из способов:
- Выполните запрос к системному представлению
schemata
(вместоDB_NAME
подставьте имя логической БД в верхнем регистре; см. пример ниже):SELECT * FROM INFORMATION_SCHEMA.schemata WHERE schema_name = '<DB_NAME>'
Если логическая база данных существует, запрос возвращает одну запись, иначе — ноль записей.
- Проверьте дерево объектов в вашем SQL-клиенте (см. рисунок ниже).
Если логическая база данных существует, она присутствует среди объектов в SQL-клиенте, иначе — отсутствует среди объектов.
В примере ниже показан запрос для проверки наличия логической БД sales
.
-- проверка наличия логической базы данных sales
SELECT
CASE
WHEN count(*) > 0 THEN 'БД существует'
ELSE 'БД не существует'
END
FROM INFORMATION_SCHEMA.schemata
WHERE schema_name = 'SALES'
На рисунке ниже показана логическая БД в дереве объектов SQL-клиента.
Проверка наличия логической таблицы
Чтобы проверить наличие логической таблицы, используйте любой из способов:
- Выполните запрос к системному представлению
tables
(вместоDB_NAME
иTABLE_NAME
подставьте имя логической БД и имя таблицы в верхнем регистре; см. пример ниже):SELECT * FROM INFORMATION_SCHEMA.tables WHERE table_schema = '<DB_NAME>' AND (table_name = '<TABLE_NAME>' AND table_type = 'BASE TABLE')
Если логическая таблица существует, запрос возвращает одну запись, иначе — ноль записей.
- Выполните SELECT-запрос к логической таблице, например:
SELECT * FROM <db_name>.<table_name> LIMIT 5
Если логическая таблица существует, запрос возвращает от ноля до пяти записей (в зависимости от содержимого таблицы), иначе — исключение
Entity <table_name> does not exist
. - Проверьте дерево объектов в вашем SQL-клиенте (см. рисунок ниже).
Если логическая таблица существует, она присутствует среди объектов логической БД в SQL-клиенте, иначе — отсутствует среди объектов логической БД.
В примере ниже показан запрос для проверки наличия логической таблицы sales
.
-- проверка наличия логической таблицы sales
SELECT
CASE
WHEN count(*) > 0 THEN 'таблица существует'
ELSE 'таблица не существует'
END
FROM INFORMATION_SCHEMA.tables
WHERE table_schema = 'SALES' AND (table_name = 'SALES' AND table_type = 'BASE TABLE')
На рисунке ниже показано дерево объектов SQL-клиента, которое содержит логические таблицы sales
и stores
.
Проверка наличия логического представления
Чтобы проверить наличие логического представления, используйте любой из способов:
- Выполните запрос к системному представлению
tables
(вместоDB_NAME
иVIEW_NAME
подставьте имя логической БД и имя логического представления в верхнем регистре; см. пример ниже):SELECT * FROM INFORMATION_SCHEMA.tables WHERE table_schema = '<DB_NAME>' AND (table_name = '<VIEW_NAME>' AND table_type = 'VIEW')
Если логическое представление существует, запрос возвращает одну запись, иначе — ноль записей.
- Выполните SELECT-запрос к логическому представлению, например:
SELECT * FROM <db_name>.<view_name> LIMIT 5
Если логическое представление существует, запрос возвращает от ноля до пяти записей (в зависимости от содержимого представления), иначе — исключение
Entity <view_name> does not exist
. - Проверьте дерево объектов в вашем SQL-клиенте (см. рисунок ниже).
Если логическое представление, оно присутствует среди объектов логической БД в SQL-клиенте, иначе — отсутствует среди объектов логической БД.
В примере ниже показан запрос для проверки наличия логического представления stores_by_sold_products
.
-- проверка наличия логического представления stores_by_sold_products
SELECT
CASE
WHEN count(*) > 0 THEN 'представление существует'
ELSE 'представление не существует'
END
FROM INFORMATION_SCHEMA.tables
WHERE table_schema = 'SALES' AND (table_name = 'STORES_BY_SOLD_PRODUCTS' AND table_type = 'VIEW')
На рисунке ниже показан фрагмент дерева объектов SQL-клиента, которое содержит логическое представление stores_by_sold_products
.
Проверка наличия материализованного представления
Чтобы проверить наличие материализованного представления, используйте любой из способов:
- Выполните запрос к системному представлению
tables
(вместоDB_NAME
иMATERIALIZED_VIEW_NAME
подставьте имя логической БД и имя представления в верхнем регистре; см. пример ниже):SELECT * FROM INFORMATION_SCHEMA.tables WHERE table_schema = '<DB_NAME>' AND ((table_name = '<MATERIALIZED_VIEW_NAME>' AND table_type = 'BASE TABLE') OR (table_name = 'SYS_<MATERIALIZED_VIEW_NAME>' AND table_type = 'VIEW'))
Если материализованное представление существует, запрос возвращает две записи, иначе — ноль записей.
- Выполните SELECT-запрос к материализованному представлению, например:
SELECT * FROM <db_name>.<materialized_view_name> LIMIT 5
Если материализованное представление существует, запрос возвращает от ноля до пяти записей (в зависимости от содержимого представления), иначе — исключение
Entity <materialized_view_name> does not exist
. - Проверьте дерево объектов в вашем SQL-клиенте (см. рисунок ниже).
Если материализованное представление существует, оно присутствует среди объектов логической БД в SQL-клиенте, иначе — отсутствует среди объектов логической БД.
В примере ниже показан запрос для проверки наличия материализованного представления sales_and_stores
.
-- проверка наличия материализованного представления sales_and_stores
SELECT
CASE
WHEN count(*) > 1 THEN 'представление существует'
ELSE 'представление не существует'
END
FROM INFORMATION_SCHEMA.tables
WHERE table_schema = 'SALES' AND
((table_name = 'SALES_AND_STORES' AND table_type = 'BASE TABLE') OR
(table_name = 'SYS_SALES_AND_STORES' AND table_type = 'VIEW'))
На рисунке ниже показано дерево объектов SQL-клиента, которое содержит материализованное представление sales_and_stores
.
Проверка наличия внешней таблицы
Чтобы проверить наличие внешней таблицы загрузки или выгрузки, проверьте дерево объектов в вашем SQL-клиенте (см. рисунки ниже). Если внешняя таблица существует, она присутствует среди объектов логической БД в SQL-клиенте, иначе — отсутствует среди объектов логической БД.
На рисунках ниже показаны фрагменты дерева объектов SQL-клиента: с внешней таблицей загрузки sales_ext_upload
и внешней таблицей выгрузки sales_ext_download
соответственно.