Compatibility: Included Packages¶
The 10 packages below are fully included in orafce_no_c. See How to Read These Tables for what the columns mean.
dbms_assert¶
| Function | Includes C | Is Converted |
|---|---|---|
| dbms_assert.enquote_literal | Y | Y |
| dbms_assert.enquote_name | Y | Y |
| dbms_assert.noop | Y | Y |
| dbms_assert.object_name | Y | Y |
| dbms_assert.qualified_sql_name | Y | Y |
| dbms_assert.schema_name | Y | Y |
| dbms_assert.simple_sql_name | Y | Y |
dbms_output¶
| Function | Includes C | Is Converted |
|---|---|---|
| dbms_output.disable | Y | Y |
| dbms_output.enable | Y | Y |
| dbms_output.get_line | Y | Y |
| dbms_output.get_lines | Y | Y |
| dbms_output.new_line | Y | Y |
| dbms_output.put | Y | Y |
| dbms_output.put_line | Y | Y |
| dbms_output.serveroutput | Y | Y |
dbms_random¶
| Function | Includes C | Is Converted |
|---|---|---|
| dbms_random.initialize | Y | Y |
| dbms_random.normal | Y | Y |
| dbms_random.random | Y | Y |
| dbms_random.seed | Y | Y |
| dbms_random.string | Y | Y |
| dbms_random.terminate | Y | Y |
| dbms_random.value | Y | Y |
Every function here is converted, but not every value produced is byte-for-byte reproducible against real orafce — see Behavioral Differences from Real orafce for what that means in practice and why it's still a safe, correct conversion.
dbms_utility¶
| Function | Includes C | Is Converted |
|---|---|---|
| dbms_utility.format_call_stack | Y | N |
| dbms_utility.get_time | Y | Y |
oracle¶
By far the largest package — 105 objects, more than the other 14 packages combined.
| Function | Includes C | Is Converted |
|---|---|---|
| oracle.add_days_to_timestamp | N | N/A |
| oracle.add_months | Y | Y |
| oracle.bitand | N | N/A |
| oracle.btrim | Y | Y |
| oracle.cosh | N | N/A |
| oracle.date [DOMAIN] | N | N/A |
| oracle.dba_segments [VIEW] | N | N/A |
| oracle.dbtimezone | Y | Y |
| oracle.decode | Y | Y |
| oracle.dual [VIEW] | N | N/A |
| oracle.dump | Y | N |
| oracle.get_full_version_num | Y | Y |
| oracle.get_major_version | Y | Y |
| oracle.get_major_version_num | Y | Y |
| oracle.get_platform | Y | N |
| oracle.get_status | Y | Y |
| oracle.greatest | Y | Y |
| oracle.instr | Y | Y |
| oracle.last_day | Y | Y |
| oracle.least | Y | Y |
| oracle.length | Y | Y |
| oracle.lengthb | Y | Y |
| oracle.listagg [AGGREGATE] | Y | Y |
| oracle.listagg1_transfn | Y | Y |
| oracle.listagg2_transfn | Y | N |
| oracle.listagg_finalfn | Y | Y |
| oracle.lnnvl | Y | Y |
| oracle.lpad | Y | Y |
| oracle.ltrim | Y | Y |
| oracle.median [AGGREGATE] | Y | Y |
| oracle.median4_finalfn | Y | Y |
| oracle.median4_transfn | Y | Y |
| oracle.median8_finalfn | Y | Y |
| oracle.median8_transfn | Y | Y |
| oracle.mod | N | N/A |
| oracle.months_between | Y | Y |
| oracle.nanvl | N | N/A |
| oracle.next_day | Y | Y |
| oracle.nlssort | Y | N |
| oracle.numtodsinterval | N | N/A |
| oracle.nvarchar2 | Y | Y* |
| oracle.nvarchar2 [TYPE] | Y | N |
| oracle.nvarchar2_transform | Y | N |
| oracle.nvarchar2in | Y | N |
| oracle.nvarchar2out | Y | N |
| oracle.nvarchar2recv | Y | N |
| oracle.nvarchar2send | Y | N |
| oracle.nvarchar2typmodin | Y | N |
| oracle.nvarchar2typmodout | Y | N |
| oracle.nvl | Y | Y |
| oracle.nvl2 | Y | Y |
| oracle.orafce__obsolete_to_date | Y | Y |
| oracle.orafce_concat2 | Y | N* |
| oracle.product_component_version [VIEW] | Y | N* |
| oracle.regexp_count | N | N/A |
| oracle.regexp_count_pattern_fix | N | N/A |
| oracle.regexp_instr | Y | Y |
| oracle.regexp_like | N | N/A |
| oracle.regexp_replace | Y | Y |
| oracle.regexp_substr | N | N/A |
| oracle.remainder | Y | Y |
| oracle.replace_empty_strings | Y | Y |
| oracle.replace_null_strings | Y | Y |
| oracle.round | Y | Y |
| oracle.rpad | Y | Y |
| oracle.rtrim | Y | Y |
| oracle.sessiontimezone | Y | Y |
| oracle.set_nls_sort | Y | N* |
| oracle.sinh | N | N/A |
| oracle.strposb | Y | Y |
| oracle.substr | Y | Y |
| oracle.substrb | Y | Y |
| oracle.subtract | N | N/A |
| oracle.sys_extract_utc | Y | Y |
| oracle.sys_guid | Y | Y |
| oracle.sysdate | Y | Y |
| oracle.tanh | N | N/A |
| oracle.to_char | Y | Y |
| oracle.to_date | N | N/A |
| oracle.to_multi_byte | Y | Y |
| oracle.to_number | Y | Y |
| oracle.to_single_byte | Y | Y |
| oracle.translate_oracle_modifiers | N | N/A |
| oracle.trunc | Y | Y |
| oracle.unistr | Y | Y |
| oracle.user_cons_columns [VIEW] | N | N/A |
| oracle.user_constraints [VIEW] | N | N/A |
| oracle.user_ind_columns [VIEW] | N | N/A |
| oracle.user_objects [VIEW] | N | N/A |
| oracle.user_procedures [VIEW] | N | N/A |
| oracle.user_source [VIEW] | N | N/A |
| oracle.user_tab_columns [VIEW] | N | N/A |
| oracle.user_tables [VIEW] | N | N/A |
| oracle.user_views [VIEW] | N | N/A |
| oracle.varchar2 | Y | Y* |
| oracle.varchar2 [TYPE] | Y | N |
| oracle.varchar2_transform | Y | N |
| oracle.varchar2in | Y | N |
| oracle.varchar2out | Y | N |
| oracle.varchar2recv | Y | N |
| oracle.varchar2send | Y | N |
| oracle.varchar2typmodin | Y | N |
| oracle.varchar2typmodout | Y | N |
| oracle.wm_concat [AGGREGATE] | Y | Y |
| oracle.wm_concat_transfn | Y | Y |
A few rows above need more explanation than the table can give:
varchar2/nvarchar2 and their 14 supporting [TYPE]/_transform/I-O/typmod functions remain genuinely unconvertible — no PL/pgSQL or SQL-language function can declare the cstring parameter a custom base type's I/O functions require. The two top-level rows are marked Y* rather than plain N because an optional, separately-installed family of differently-named domains is available as a workaround for actually using the type in migrated code — see Working with Types onward. It's a genuinely weaker claim than Y: a different object, not a true type conversion (see Why These Types Error Instead of Truncating), and not part of the core install.
lengthb/strposb/substrb were originally excluded as "convertible in isolation, but pointless without a byte-oriented type to pair with" — the same reasoning used for nlssort/set_nls_sort below. That objection is resolved by the VARCHAR2/NVARCHAR2 domain family, so all three are now included unconditionally — they ship in the core install regardless of whether you also install the optional type add-on.
listagg2_transfn is marked N, not Y — nothing by that name exists in orafce_no_c. Real orafce's 2-argument oracle.listagg(text, text) aggregate (with an explicit delimiter) is backed by this C function; this port's equivalent aggregate instead reuses PostgreSQL core's own string_agg_transfn/string_agg_finalfn directly. The aggregate's outward behavior is fully available either way — this is a bypass of the specific support function, not a gap in what you can actually do.
The 12 [VIEW]-tagged rows are Oracle data-dictionary emulation views (dual, the various user_* catalog views, dba_segments, product_component_version). 11 of them are plain CREATE VIEW statements over information_schema/pg_catalog in real orafce too — no C anywhere — and are copied verbatim. product_component_version is the one exception (N*): one of its 3 output columns calls oracle.get_platform(), which is itself excluded (see below), so it's deferred rather than shipped with a fudged column.
dump and get_platform are excluded outright: dump() does a raw memory dump of an arbitrary value, and get_platform() returns a hardcoded '64bit'/'32bit' string baked in at compile time — neither has any SQL-level equivalent.
nlssort/set_nls_sort are excluded together: nlssort() calls the C library's strxfrm() against a caller-supplied, arbitrary named locale, and PostgreSQL's own collation/sort behavior is fixed at column/expression definition time, not late-bound per call — there's no way to run strxfrm() against an arbitrary locale from SQL. Excluding one without the other would leave neither useful.
orafce_concat2 is excluded: it's the internal helper backing the || operator for varchar2/nvarchar2 values, and has no purpose once those types themselves are excluded. Note it isn't just "pointless" in the abstract — it doesn't even need reviving for the optional domain add-on, since domains inherit || from their underlying text type for free.
plunit¶
| Function | Includes C | Is Converted |
|---|---|---|
| plunit.assert_equals | Y | Y |
| plunit.assert_false | Y | Y |
| plunit.assert_not_equals | Y | Y |
| plunit.assert_not_null | Y | Y |
| plunit.assert_null | Y | Y |
| plunit.assert_true | Y | Y |
| plunit.fail | Y | Y |
plvchr¶
| Function | Includes C | Is Converted |
|---|---|---|
| plvchr._is_kind | Y | Y |
| plvchr.char_name | Y | Y |
| plvchr.first | Y | Y |
| plvchr.is_blank | N | N/A |
| plvchr.is_digit | N | N/A |
| plvchr.is_letter | N | N/A |
| plvchr.is_other | N | N/A |
| plvchr.is_quote | N | N/A |
| plvchr.last | Y | Y |
| plvchr.nth | Y | Y |
| plvchr.quoted1 | N | N/A |
| plvchr.quoted2 | N | N/A |
| plvchr.stripped | N | N/A |
plvdate¶
| Function | Includes C | Is Converted |
|---|---|---|
| plvdate.add_bizdays | Y | Y |
| plvdate.bizdays_between | Y | Y |
| plvdate.days_inmonth | Y | Y |
| plvdate.default_holidays | Y | Y |
| plvdate.include_start | Y | Y |
| plvdate.including_start | Y | Y |
| plvdate.isbizday | Y | Y |
| plvdate.isleapyear | Y | Y |
| plvdate.nearest_bizday | Y | Y |
| plvdate.next_bizday | Y | Y |
| plvdate.noinclude_start | N | N/A |
| plvdate.prev_bizday | Y | Y |
| plvdate.set_nonbizday | Y | Y |
| plvdate.unset_nonbizday | Y | Y |
| plvdate.unuse_easter | N | N/A |
| plvdate.unuse_great_friday | N | N/A |
| plvdate.use_easter | Y | Y |
| plvdate.use_great_friday | Y | Y |
| plvdate.using_easter | Y | Y |
| plvdate.using_great_friday | Y | Y |
| plvdate.version | Y | Y |
plvstr¶
| Function | Includes C | Is Converted |
|---|---|---|
| plvstr.betwn | Y | Y |
| plvstr.instr | Y | Y |
| plvstr.is_prefix | Y | Y |
| plvstr.left | Y | Y |
| plvstr.lpart | Y | Y |
| plvstr.lstrip | Y | Y |
| plvstr.normalize | Y | Y |
| plvstr.right | Y | Y |
| plvstr.rpart | Y | Y |
| plvstr.rstrip | Y | Y |
| plvstr.rvrs | Y | Y |
| plvstr.substr | Y | Y |
| plvstr.swap | Y | Y |
Three functions in this package (betwn, is_prefix, normalize) have confirmed bugs in real orafce itself — some deliberately preserved bug-for-bug, one deliberately fixed. See Confirmed Bugs Found in Real orafce before relying on exact behavioral parity for these three.
plvsubst¶
| Function | Includes C | Is Converted |
|---|---|---|
| plvsubst.setsubst | Y | Y |
| plvsubst.string | Y | Y |
| plvsubst.subst | Y | Y |
Continue to Compatibility: Excluded Packages.