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. |
N/A does not mean \"not included\" — it means \"nothing needed converting\"
An N/A row is not a gap you need to fill in yourself. It means real orafce's own version of that function was already pure SQL/PL/pgSQL — no C, nothing to port — so orafce_no_c simply copies it over verbatim, unchanged, exactly like a Y row. It's installed automatically alongside everything else the moment you install a package that includes it; there is no manual step, and no need to go copy that function out of real orafce's own source yourself. The only rows that are genuinely not shipped are N and N*.
What "included" means in practice¶
A package marked "Included in orafce_no_c" ships in full — every Y and every N/A row in that package's table is created automatically 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.