Функции функциональности FOREIGN DATA WRAPPER для БД Oracle
Функции, представленные в данном разделе, реализованы в рамках функциональности FOREIGN DATA WRAPPER для БД Oracle.
oracle_diag()
Функция возвращает версии oracle_fdw, сервера PostgreSQL и клиента Oracle.
Синтаксис:
oracle_diag(name DEFAULT NULL)
RETURNS text
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
name | name | Имя внешнего сервера |
Возвращаемое значение:
Функция возвращает версии oracle_fdw, сервера PostgreSQL и клиента Oracle.
Пример использования:
SELECT oracle_diag();
Пример вывода:
oracle_fdw 2.5.0, PostgreSQL 15.5, Oracle client 23.9.0.25.7
Заметки об использовании:
Если функция вызывается без аргумента или в качестве аргумента передан NULL, будут возвращены значения некоторых переменных среды, используемых для установки соединения с Oracle. Если в качестве аргумента передать имя внешнего сервера (foreign server в Pangolin), функция дополнительно вернет версию сервера Oracle.
Функция oracle_diag полезна только для диагностических целей.
oracle_fdw_handler()
Функция обработчика возвращает структуру указателей на функции обратного вызова, которые будут вызываться планировщиком, исполнителем и различными командами обслуживания. Это необходимо для взаимодействия с аналогичными функциями, созданными со стороны СУБД Pangolin.
Синтаксис:
FUNCTION oracle_fdw_handler()
RETURNS fdw_handler
Входные параметры:
Отсутствуют.
Возвращаемое значение:
Функция возвращает специальный псевдотип fdw_handler.
Заметки об использовании:
Функция-обработчик должна быть зарегистрирована в базе данных PostgreSQL, так как не имеет аргументов и возвращает специальный псевдотип fdw_handler. Функции обратного вызова являются простыми функциями языка C, которые не видны и не могут быть вызваны на уровне SQL.
oracle_fdw_validator()
Функция валидации отвечает за проверку параметров, заданных командами CREATE и ALTER (создание и изменение) для внешней обертки данных, а также для внешних серверов, сопоставлений пользователей и внешних таблиц, использующих эту обертку.
Синтаксис:
FUNCTION oracle_fdw_validator(text[], oid)
RETURNS void
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
text[] | array | Текстовый массив, содержащий проверяемые параметры |
oid | oid | Идентификатор, представляющий тип объекта, с которым связаны параметры (в виде OID системного каталога будет сохранен ForeignDataWrapperRelationId, ForeignServerRelationId, UserMappingRelationId или ForeignTableRelationId) |
Возвращаемое значение:
Отсутствует.
Заметки об использовании:
Если функция проверки не указана, параметры не проверяются во время создания или изменения объекта. Функции oracle_fdw_handler и oracle_fdw_validator нужны для обработки и проверки создаваемой обертки oracle_fdw.
FOREIGN DATA WRAPPER oracle_fdw
HANDLER oracle_fdw_handler
VALIDATOR oracle_fdw_validator
Расширение автоматически создает обертку oracle_fdw. Как правило, это все, что нужно, чтобы перейти к определению внешних серверов.
Создайте дополнительные обертки данных Oracle, например, если нужно установить параметр nls_lang (можно изменить существующую обертку oracle_fdw, но все изменения будут потеряны после дампа/восстановления).
oracle_close_connections()
Функция oracle_close_connections может быть использована для закрытия всех открытых подключений Oracle в открытом сеансе.
Синтаксис:
FUNCTION oracle_close_connections()
RETURNS void
Входные параметры:
Отсутствуют.
Возвращаемое значение:
Пустое значение.
Пример использования:
SELECT oracle_close_connections();
oracle_execute()
Функция может быть использована для выполнения произвольных инструкций SQL на удаленном сервере Oracle. Она будет работать только с операторами, которые не возвращают результат (как правило, операторы DDL).
Синтаксис:
FUNCTION oracle_execute(server name, stmt text) RETURNS void
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
server | name | Имя сервера |
stmt | text | Текст инструкции SQL |
Возвращаемое значение:
Пустой результат SQL-запроса.
Примеры использования:
-
Создание таблицы:
SELECT oracle_execute('ora_db', 'create table new_table(id number(10), some_description varchar(50))'); -
Наполнение таблицы:
SELECT oracle_execute('ora_db', 'BEGIN INSERT INTO new_table(id, some_description) VALUES (1, ''some_text''); END;');
SELECT oracle_execute('ora_db', 'INSERT INTO new_table(id, some_description) VALUES (2, ''some_text2'')');
Заметки об использовании:
Будьте аккуратны при использовании этой функции, так как она может нарушить управление транзакциями oracle_fdw. Выполнение инструкции DDL в Oracle приведет к неявному коммиту. Рекомендуем использовать функцию oracle_execute вне блока транзакций.