Automatic code conversion from Oracle PL/SQL
to Postgres Pro PL/pgSQL
is a work in progress in ora2pgpro and
you have to do manual work. The Perl code used for automatic
conversion is all stored in a specific Perl Module named
Ora2Pgpro/PLSQL.pm.
PLSQL_PGSQLEnable/disable PL/SQL to PL/pgSQL conversion. Enabled by default.
NULL_EQUAL_EMPTY
ora2pgpro can replace all conditions
with a test on NULL by a call to
the coalesce() function to mimic the Oracle
behavior where empty string are considered equal to NULL.
(field1 IS NULL) is replaced by (coalesce(field1::text, '') = '') (field2 IS NOT NULL) is replaced by (field2 IS NOT NULL AND field2::text <> '')
You might want this replacement to be sure that your application will have the same behavior but if you have control on you application a better way is to change it to transform empty string into NULL because Postgres Pro makes the difference.
EMPTY_LOB_NULL
Force empty_clob() and
empty_blob() to be exported as NULL
instead as empty string for the first one and
\x for the second. If NULL is allowed
in your column, this might improve data export speed
if you have a lot of empty lobs.
Default is to preserve the exact data from Oracle.
PACKAGE_AS_SCHEMA
If you do not want to export package as schema but as simple
functions you might also want to replace all calls to
package_name.function_name. If you disable the
PACKAGE_AS_SCHEMA directive,
then ora2pgpro will replace all
call to package_name.function_name() by
package_name_function_name(). Default is
to use a schema to emulate package.
The replacement will be done in all kind of DDL or code
that is parsed by the PL/SQL
to PL/pgSQL converter.
PLSQL_PGSQL must be enabled
or -p used in command line.
REWRITE_OUTER_JOIN
Enable this directive if the rewrite of
Oracle native syntax (+) of
OUTER JOIN is broken. This will force
ora2pgpro to not rewrite such code,
default is to try to rewrite simple form of the right outer
join for the moment.
UUID_FUNCTIONBy default ora2pgpro will convert call to SYS_GUID() Oracle function with a call to uuid_generate_v4 from uuid-ossp extension. You can redefined it to use the gen_random_uuid function from pgcrypto extension by changing the function name. Default to uuid_generate_v4.
Note that when a RAW(16) and RAW(32) columns is found or that the RAW column has "SYS_GUID()" as default value ora2pgpro will automatically translate the type of the column into uuid which might be the right translation in most of the case. In this case data will be automatically migrated as Postgres Pro uuid data type provided by the "uuid-ossp" extension.
FUNCTION_STABLE
By default Oracle functions are marked as
STABLE as they can not modify data unless
when used in PL/SQL with
variable assignment or as conditional expression. You can
force ora2pgpro to create these
function as VOLATILE by
disabling this configuration directive.
COMMENT_COMMIT_ROLLBACKBy default call to COMMIT/ROLLBACK are kept untouched by ora2pgpro to force the user to review the logic of the function. Once it is fixed in Oracle source code or you want to comment these calls, enable the following directive.
COMMENT_SAVEPOINT
It is common to see SAVEPOINT calls inside
PL/SQL procedure
together with a ROLLBACK TO savepoint_name.
When COMMENT_COMMIT_ROLLBACK is enabled,
you may want to also comment SAVEPOINT calls,
in this case enable it.
STRING_CONSTANT_REGEXPora2pgpro replaces all string constants during the PL/SQL to PL/pgSQL translation, string constants are all text included between single quote. If you have a string placeholder used in dynamic call to queries, you can set a list of regexp to be temporary replaced to not break the parser. For example:
STRING_CONSTANT_REGEXP <placeholder value=".*">
The list of regexp must use the semicolon as separator.
ALTERNATIVE_QUOTING_REGEXPTo support the Alternative Quoting Mechanism ('Q' or 'q') for String Literals set the regexp with the text capture to use to extract the text part. For example with a variable declared as
c_sample VARCHAR2(100 CHAR) := q'{This doesn't work.}';
the regexp to use must be:
ALTERNATIVE_QUOTING_REGEXP q'{(.*)}'
ora2pgpro will use the $$ delimiter, with the example the
result will be:
c_sample varchar(100) := $$This doesn't work.$$;
The value of this configuration directive can be a list of regexp separated by a semicolon. The capture part (in parenthesis) is mandatory in each regexp if you want to restore the string constant.
USE_ORAFCEIf you want to use functions defined in the orafce library and prevent ora2pgpro to translate calls to these functions, enable this directive.
By default ora2pgpro rewrite
add_month(), add_year(),
date_trunc() and
to_char() functions, but you may prefer to
use the orafce version of these
function that do not need any code transformation.
INCLUDE_PACKAGES
Contains the comma-separated list of packages to allow
to be exported. Used only with the PACKAGE
export type. Only the last occurrence found in the file
will be used.
EXCLUDE_PACKAGES
Contains the comma-separated list of packages to exclude
from export. Used only with the PACKAGE
export type. Only the last occurrence found in the file
will be used.
POSTGRESPRO_ATXIf set to 1, enables export of autonomous transactions directly as Postgres Pro autonomous transactions.