Skip to content

Compatibility: How to Read These Tables

The next two chapters list, package by package, every function, procedure, aggregate, domain, and view in real orafce (version 4.16) and whether orafce_no_c includes it. This chapter explains the columns so the tables are actually useful rather than just a wall of Y/N.

The columns

Each row is one function, procedure, aggregate, or type, as declared in real orafce. Where real orafce has more than one overload of the same name, they're combined into a single row — the status describes the name as a whole, not each individual overload.

Currently includes C — whether real orafce's own implementation of that object is LANGUAGE C (or LANGUAGE internal, PostgreSQL's term for built-in C code), or backed by one. A N here means real orafce's own version is already pure SQL or PL/pgSQL — nothing needed converting in the first place.

Is Converted — orafce_no_c's status for that object:

Value Meaning
Y Has a C dependency in real orafce; successfully converted to pure PL/pgSQL/SQL, and shipped.
N Has a C dependency in real orafce; not converted — genuinely impossible in pure SQL, or blocked by something else that is.
N/A Real orafce's own version is already pure SQL/PL/pgSQL — nothing to convert, and it's copied over verbatim.
N* Technically convertible on its own, but the other function(s) that would make it useful aren't converted — so converting it in isolation would just be dead weight. Not shipped.
Y* Converted, but only as a differently-named, optional add-on you install separately — never created by the core extension or standalone install. Currently applies only to oracle.varchar2/oracle.nvarchar2 — see VARCHAR2 and NVARCHAR2 for what the add-on actually provides.

What "included" means in practice

A package marked "Included in orafce_no_c" ships in full — every Y and N/A row in that package's table is created when you install it, via either install mode (see the Installation book). A package marked "Not included" ships nothing at all — every function in it stays N/N*, and the reasoning for the whole package is given as prose above its table.

10 of the 15 real orafce packages are included: dbms_assert, dbms_output, dbms_random, dbms_utility, oracle, plunit, plvchr, plvdate, plvstr, plvsubst.

5 are not: dbms_alert, dbms_pipe, dbms_sql, plvlex, utl_file — every one of these needs a genuine C-only OS or shared-memory capability (cross-session shared memory and blocking waits, dynamic bind-variable typing at the C fmgr level, raw filesystem I/O, or a hand-written lexer/parser) that PL/pgSQL simply cannot do. Included Packages and Excluded Packages give the full reasoning per package.

The oracle package is the one exception worth reading closely

oracle is included, but it's also the only package with a genuine partial exclusion inside it: oracle.varchar2/oracle.nvarchar2 (custom C base types) can't be ported at all, and get the Y* optional-add-on treatment described above. Everything else in oracle is either fully converted or excluded for the same reasons as the fully-excluded packages. See Working with Types onward for the full story.

Continue to Compatibility: Included Packages.