orafce

模拟 Oracle RDBMS 的一部分函数和包的函数和运算符

概览

扩展包名版本分类许可证语言
orafce4.16.5SIMBSD 0-ClauseC
ID扩展名BinLibLoadCreateTrustReloc模式
9100orafce-
相关扩展oracle_fdw pgtt session_variable pg_statement_rollback pg_dbms_metadata pg_dbms_lock pg_dbms_job db_migrator

el llvmjit deps break

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG4.16.51817161514orafce-
RPMPGDG4.16.51817161514orafce_$v-
DEBPGDG4.16.51817161514postgresql-$v-orafce-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
PGDG 4.16.5
PGDG 4.16.5
PGDG 4.16.5
el9.aarch64
PGDG 4.16.5
el9.aarch64.pg16 : orafce_16
orafce_16-4.16.5-1PGDG.rhel9.7.aarch64.rpm PGDG · 4.16.5 · 147.9KiB orafce_16-4.16.2-2PGDG.rhel9.aarch64.rpm PGDG · 4.16.2 · 147.9KiB orafce_16-4.16.1-1PGDG.rhel9.aarch64.rpm PGDG · 4.16.1 · 147.6KiB orafce_16-4.14.6-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.6 · 146.6KiB orafce_16-4.14.4-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.4 · 146.7KiB orafce_16-4.14.3-2PGDG.rhel9.aarch64.rpm PGDG · 4.14.3 · 146.7KiB orafce_16-4.14.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.3 · 146.5KiB orafce_16-4.14.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.2 · 146.4KiB orafce_16-4.14.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.0 · 141.4KiB orafce_16-4.13.5-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.5 · 141.5KiB orafce_16-4.13.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.3 · 141.3KiB orafce_16-4.13.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.2 · 141.2KiB orafce_16-4.12.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.12.0 · 140.0KiB orafce_16-4.11.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.11.0 · 139.5KiB orafce_16-4.10.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.3 · 139.3KiB orafce_16-4.10.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.2 · 139.1KiB orafce_16-4.10.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.0 · 138.3KiB orafce_16-4.9.4-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.4 · 137.6KiB orafce_16-4.9.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.3 · 137.5KiB orafce_16-4.9.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.2 · 137.3KiB orafce_16-4.9.1-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.1 · 137.2KiB orafce_16-4.9.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.0 · 137.1KiB
PGDG 4.16.5
el9.aarch64.pg15 : orafce_15
orafce_15-4.16.5-1PGDG.rhel9.7.aarch64.rpm PGDG · 4.16.5 · 148.0KiB orafce_15-4.16.2-2PGDG.rhel9.aarch64.rpm PGDG · 4.16.2 · 148.0KiB orafce_15-4.16.1-1PGDG.rhel9.aarch64.rpm PGDG · 4.16.1 · 147.7KiB orafce_15-4.14.6-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.6 · 146.8KiB orafce_15-4.14.4-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.4 · 146.8KiB orafce_15-4.14.3-2PGDG.rhel9.aarch64.rpm PGDG · 4.14.3 · 146.8KiB orafce_15-4.14.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.3 · 146.6KiB orafce_15-4.14.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.2 · 146.6KiB orafce_15-4.14.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.0 · 146.0KiB orafce_15-4.13.5-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.5 · 145.7KiB orafce_15-4.13.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.3 · 145.5KiB orafce_15-4.13.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.2 · 145.3KiB orafce_15-4.12.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.12.0 · 143.8KiB orafce_15-4.11.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.11.0 · 143.4KiB orafce_15-4.10.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.3 · 143.7KiB orafce_15-4.10.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.2 · 143.6KiB orafce_15-4.10.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.0 · 142.7KiB orafce_15-4.9.4-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.4 · 142.2KiB orafce_15-4.9.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.3 · 142.2KiB orafce_15-4.9.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.2 · 141.8KiB orafce_15-4.9.1-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.1 · 141.5KiB orafce_15-4.9.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.0 · 141.5KiB
PGDG 4.16.5
el9.aarch64.pg14 : orafce_14
orafce_14-4.16.5-1PGDG.rhel9.7.aarch64.rpm PGDG · 4.16.5 · 149.0KiB orafce_14-4.16.2-2PGDG.rhel9.aarch64.rpm PGDG · 4.16.2 · 149.0KiB orafce_14-4.16.1-1PGDG.rhel9.aarch64.rpm PGDG · 4.16.1 · 148.7KiB orafce_14-4.14.6-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.6 · 147.7KiB orafce_14-4.14.4-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.4 · 147.7KiB orafce_14-4.14.3-2PGDG.rhel9.aarch64.rpm PGDG · 4.14.3 · 147.7KiB orafce_14-4.14.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.3 · 147.5KiB orafce_14-4.14.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.2 · 147.5KiB orafce_14-4.14.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.14.0 · 146.8KiB orafce_14-4.13.5-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.5 · 146.5KiB orafce_14-4.13.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.3 · 146.2KiB orafce_14-4.13.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.13.2 · 146.1KiB orafce_14-4.12.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.12.0 · 145.1KiB orafce_14-4.11.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.11.0 · 144.5KiB orafce_14-4.10.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.3 · 144.6KiB orafce_14-4.10.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.2 · 144.4KiB orafce_14-4.10.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.10.0 · 143.6KiB orafce_14-4.9.4-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.4 · 142.8KiB orafce_14-4.9.3-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.3 · 142.8KiB orafce_14-4.9.2-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.2 · 142.5KiB orafce_14-4.9.1-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.1 · 142.4KiB orafce_14-4.9.0-1PGDG.rhel9.aarch64.rpm PGDG · 4.9.0 · 142.4KiB
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64

安装

您可以直接安装 orafce 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:

pig repo add pgdg -u          # 添加 PGDG 仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install orafce;          # 当前活跃 PG 版本安装
pig ext install -y orafce -v 18  # PG 18
pig ext install -y orafce -v 17  # PG 17
pig ext install -y orafce -v 16  # PG 16
pig ext install -y orafce -v 15  # PG 15
pig ext install -y orafce -v 14  # PG 14
dnf install -y orafce_18       # PG 18
dnf install -y orafce_17       # PG 17
dnf install -y orafce_16       # PG 16
dnf install -y orafce_15       # PG 15
dnf install -y orafce_14       # PG 14
apt install -y postgresql-18-orafce   # PG 18
apt install -y postgresql-17-orafce   # PG 17
apt install -y postgresql-16-orafce   # PG 16
apt install -y postgresql-15-orafce   # PG 15
apt install -y postgresql-14-orafce   # PG 14

创建扩展

CREATE EXTENSION orafce;

用法

orafce: 模拟 Oracle RDBMS 部分函数和包的函数与操作符

日期函数

SELECT add_months(date '2005-05-31', 1);        -- 2005-06-30
SELECT last_day(date '2005-05-24');              -- 2005-05-31
SELECT next_day(date '2005-05-24', 'monday');    -- 2005-05-30
SELECT months_between(date '1995-02-02', date '1995-01-01'); -- 1.032...
SELECT trunc(date '2005-07-12', 'iw');           -- 2005-07-11
SELECT round(date '2005-07-12', 'yyyy');         -- 2006-01-01

Oracle DATE 数据类型

SET search_path TO oracle, "$user", public, pg_catalog;
CREATE TABLE t (col1 date);
INSERT INTO t VALUES('2014-06-24 12:12:11'::date);  -- 包含时间部分

字符串函数(NVL、DECODE 等)

SELECT nvl('A', 'B');            -- A
SELECT nvl(NULL, 'B');           -- B
SELECT decode(1, 1, 'one', 2, 'two', 'other');  -- one
SELECT lnnvl(true);              -- false
SELECT nanvl(0.0/0.0, 999);     -- 999

DUAL 表

SELECT * FROM dual;

DBMS_OUTPUT 包

SELECT dbms_output.enable();
SELECT dbms_output.put_line('Hello');
SELECT dbms_output.get_line(line, status);  -- 获取输出

DBMS_PIPE 包

SELECT dbms_pipe.create_pipe('my_pipe');
SELECT dbms_pipe.pack_message('message text');
SELECT dbms_pipe.send_message('my_pipe');
-- 在另一个会话中:
SELECT dbms_pipe.receive_message('my_pipe');
SELECT dbms_pipe.unpack_message_text();

DBMS_ALERT 包

CALL dbms_alert.register('my_alert');
-- 在另一个会话中:
CALL dbms_alert.signal('my_alert', 'Alert message');
-- 回到第一个会话:
CALL dbms_alert.waitone('my_alert', name, message, status, 60);

DBMS_UTILITY 包

SELECT dbms_utility.format_call_stack();

UTL_FILE 包

CALL utl_file.fopen('/tmp', 'test.txt', 'w');
CALL utl_file.put_line(f, 'Hello World');
CALL utl_file.fclose(f);

PLVstr / PLVchr 包

SELECT plvstr.left('Hello World', 5);     -- Hello
SELECT plvstr.right('Hello World', 5);    -- World
SELECT plvstr.rvrs('Hello');              -- olleH
SELECT plvchr.nth('Hello', 3);            -- l
SELECT plvchr.first('Hello');             -- H
SELECT plvchr.last('Hello');              -- o

PLVsubst 包

SELECT plvsubst.string('My name is %s %s.', ARRAY['Pavel','Stehule']);
-- My name is Pavel Stehule.

DBMS_ASSERT(SQL 注入防护)

SELECT dbms_assert.enquote_literal('some value');
SELECT dbms_assert.schema_name('public');
SELECT dbms_assert.object_name('my_table');

VARCHAR2 和 NVARCHAR2 类型

该扩展提供 Oracle 兼容的 varchar2nvarchar2 数据类型,分别以字节(varchar2)或字符(nvarchar2)为单位强制执行声明的长度。