Автоматическое преобразование кода из PL/SQL Oracle в PL/pgSQL Postgres Pro требует доработки в ora2pgpro и некоторых ручных действий. Код Perl code, используемый для преобразования, хранится в специально модуле Perl Ora2Pgpro/PLSQL.pm.
PLSQL_PGSQLВключает/отключает преобразование PL/SQL в PL/pgSQL. По умолчанию включено.
NULL_EQUAL_EMPTYora2pgpro может заменять все условия с тестом на 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.