Перейти к основному содержимому

Функции функциональности FOREIGN DATA WRAPPER для БД Oracle

Функции, представленные в данном разделе, реализованы в рамках функциональности FOREIGN DATA WRAPPER для БД Oracle.

oracle_diag()

Функция возвращает версии oracle_fdw, сервера PostgreSQL и клиента Oracle.

Синтаксис:

oracle_diag(name DEFAULT NULL)
RETURNS text

Входные параметры:

Название параметраТип значенияОписание
namenameИмя внешнего сервера

Возвращаемое значение:

Функция возвращает версии 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Текстовый массив, содержащий проверяемые параметры
oidoidИдентификатор, представляющий тип объекта, с которым связаны параметры (в виде 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

Входные параметры:

Название параметраТип значенияОписание
servernameИмя сервера
stmttextТекст инструкции 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 вне блока транзакций.