Автоматическое преобразование кода из PL/SQL Oracle в PL/pgSQL Postgres Pro требует доработки в ora2pgpro и некоторых ручных действий. Код Perl code, используемый для преобразования, хранится в специально модуле Perl Ora2Pgpro/PLSQL.pm
.
PLSQL_PGSQL
Включает/отключает преобразование PL/SQL в PL/pgSQL. По умолчанию включено.
NULL_EQUAL_EMPTY
ora2pgpro может заменять все условия с тестом на NULL вызовом функции
coalesce()
, чтобы имитировать поведение Oracle, где пустые строки считаются равными NULL.(field1 IS NULL) is replaced by (coalesce(field1::text, '') = '') (field2 IS NOT NULL) is replaced by (field2 IS NOT NULL AND field2::text <> '')
Такая замена может потребоваться, чтобы приложение работало аналогично, но рекомендуется преобразовывать пустые строки в NULL, поскольку Postgres Pro воспринимает их по-разному.
EMPTY_LOB_NULL
Включает экспорт функций
empty_clob()
иempty_blob()
как NULL вместо пустой строки для первой и\x
для второй. Если использование NULL в столбце допускается, это поможет увеличить скорость экспорта при наличии большого количества пустых больших объектов. По умолчанию точно сохраняются данные из Oracle.PACKAGE_AS_SCHEMA
Если необходимо экспортировать пакеты как простые функции, а не схемы, можно заменить все вызовы
package_name.function_name
. Если отключить директивуPACKAGE_AS_SCHEMA
, ora2pgpro заменит все вызовыpackage_name.function_name()
наpackage_name_function_name()
. По умолчанию пакеты экспортируются как схемы.Замена будет производиться во всех операциях DDL или коде, разбираемом при преобразовании кода PL/SQL в PL/pgSQL. При этом должна быть включена директива
PLSQL_PGSQL
, или в командной строке передан параметр-p
.REWRITE_OUTER_JOIN
Включите эту директиву, если не работает модификация стандартного синтаксиса Oracle для
OUTER JOIN
(+
). В этом случае ora2pgpro не будет модифицировать такой код, по умолчанию сейчас производится модификация простой формы правого внешнего соединения.UUID_FUNCTION
По умолчанию ora2pgpro преобразует вызов функции Oracle
SYS_GUID()
в вызов функцииuuid_generate_v4
расширения uuid-ossp. Чтобы использовать вместо неё функциюgen_random_uuid
расширения pgcrypto, можно задать в качестве значения этой директивы имя функции. По умолчанию используетсяuuid_generate_v4
.Обратите внимание, что если обнаруживаются столбцы типа RAW(16) и RAW(32) или в столбце типа RAW стоит значение по умолчанию
SYS_GUID()
, ora2pgpro автоматически преобразует тип столбца в uuid, что правильно в большинстве случаев. В этом случае данные автоматически переносятся как данные типа Postgres Pro uuid, предоставляемого модулем uuid-ossp.FUNCTION_STABLE
По умолчанию функции Oracle помечаются как
STABLE
, поскольку они не изменяют данные, кроме как в PL/SQL с назначением переменных или в качестве условного выражения. Отключите эту директиву, чтобы утилита ora2pgpro создавала такие функции какVOLATILE
.COMMENT_COMMIT_ROLLBACK
По умолчанию ora2pgpro оставляет вызовы COMMIT/ROLLBACK без изменений, чтобы пользователь проверил логику функции. Включите эту директиву, когда исходный код Oracle исправлен или необходимо закомментировать эти вызовы.
COMMENT_SAVEPOINT
В процедурах PL/SQL вызовам SAVEPOINT часто сопутствуют команды ROLLBACK TO savepoint_name. Когда директива
COMMENT_COMMIT_ROLLBACK
включена и вызовы SAVEPOINT также нужно закомментировать, включите эту директиву.STRING_CONSTANT_REGEXP
Во время преобразования кода PL/SQL в PL/pgSQL утилитаora2pgpro заменяет все строковые константы на текст в одинарных кавычках. Если в динамических вызовах используются местозаполнители в строках, в данной директиве можно задать список регулярных выражений, которые заменяются на время разбора. Например:
STRING_CONSTANT_REGEXP <placeholder value=".*">
Регулярные выражения в списке разделяются точкой с запятой.
ALTERNATIVE_QUOTING_REGEXP
В данной директиве задайте в качестве значения регулярное выражение с поиском подходящих строк для извлечения текстовой части, чтобы включить поддержку механизма альтернативных кавычек ('Q' или 'q'). Например, для переменной, заданной как
c_sample VARCHAR2(100 CHAR) := q'{This doesn't work.}';
следует использовать регулярное выражение:
ALTERNATIVE_QUOTING_REGEXP q'{(.*)}'
ora2pgpro использует разделитель
$$
, результат будет следующим:c_sample varchar(100) := $$This doesn't work.$$;
Значение данной директивы представляет собой список регулярных выражений, разделённых точкой с запятой. Обязательно указать часть поиска подходящих строк (в скобках) для каждого выражения, если необходимо восстановить строковую константу.
USE_ORAFCE
Включите эту директиву, если необходимо использовать функции, определённые в библиотеке orafce, и не преобразовывать вызовы этих функций с помощью ora2pgpro.
По умолчанию ora2pgpro заменяет функции
add_month()
,add_year()
,date_trunc()
иto_char()
, но можно использовать версии этих функций из orafce, которые не требуют преобразования кода.INCLUDE_PACKAGES
Содержит список экспортируемых пакетов, разделённых запятыми. Используется только с типом экспорта
PACKAGE
и только последнее вхождение в файле конфигурации.EXCLUDE_PACKAGES
Содержит список исключаемых из экспорта пакетов, разделённых запятыми. Используется только с типом экспорта
PACKAGE
и только последнее вхождение в файле конфигурации.POSTGRESPRO_ATX
Если задано значение 1, автономные транзакции экспортируются напрямую как автономные транзакции Postgres Pro.