(文档)第121讲:Oracle兼容工具—orafce使用技巧


目标
• orafce概述
• orafce安装
• orafce应用案例
orafce概述
orafce(Oracle Functions for PostgreSQL)是一个开源项目,旨在为 PostgreSQL 数据库提供一些 Oracle 数据库中缺失或行为不同的函数。该项目通过在 PostgreSQL 中实现这些函数,帮助用户在从 Oracle 迁移到 PostgreSQL 时减少工作量,并提高生产效率。Orafce 项目已经过 Oracle 10g 的验证,并且适用于生产环境。
后面将介绍orafce的核心功能,包括日期时间处理、空值处理、数学和字符串操作以及其他兼容性函数。
orafce安装
1、下载
git clone https://github.com/orafce/orafce.git
2、源码安装(适用于所有系统)
make
make install
3、安装插件
CREATE EXTENSION orafce;
4、验证
\dx
\dx+ orafce
Orafce使用注意事项
在使用orafce时,选择一个与你的PostgreSQL版本兼容的orafce版本是关键。由于PostgreSQL和orafce都在持续开发中,每个版本都可能包含对旧版本的改进和新特性。在安装前,应查阅官方文档以确定最佳匹配版本。
在某些情况下,orafce提供的函数与PostgreSQL内建函数可能会有命名冲突。为了避免这种情况,应使用 CREATE EXTENSION 命令时明确指定带模式名字的函数名称,或者使用别名来区分。
orafce函数
orafce提供了数百个函数,模拟了Oracle数据库中的相应功能。下面表格展示了部分orafce函数和它们在Oracle中的等价物。

Oracle与postgres数据类型对比
Oracle数据类型简介
• 整数型(如NUMBER、INTEGER、FLOAT 等)
• 二进制浮点数(如BINARY_FLOAT和BINARY_DOUBLE)
• 货币值DECIMAL和NUMERIC
• 字符型CHAR、VARCHAR2、LONG等
• 日期时间型DATE和TIMESTAMP
PostgreSQL数据类型简介
• 数值型SMALLINT、INT、BIGINT、REAL、DOUBLE PRECISION
• 字符型CHAR、VARCHAR、TEXT等,其中TEXT类型可以存储无限长度的字符串,比Oracle中的LONG类型更加灵活
日期时间型DATE、TIME、TIMESTAMP
Orafce功能列表
使用oracle数据类型
cast from bigint to oracle.nvarchar2
cast from bigint to oracle.varchar2
cast from character to oracle.nvarchar2
cast from character to oracle.varchar2
使用oracle的函数
function dbms_random.normal()
function dbms_random.random()
function dbms_random.seed(integer)
orafce实现特殊日期时间处理
• 使用 TO_DATE 将字符串转换为日期类型
• SELECT Oracle.to_date(‘2023-01-01’, ‘YYYY-MM-DD’) from oracle.dual;
• 使用TO_CHAR将日期类型转换为字符串
• SELECT TO_CHAR(NOW(), ‘YYYY-mm-dd’) from oracle.dual;
• 使用ADD_MONTHS对日期进行操作
• SELECT oracle.ADD_MONTHS(NOW(), -3) FROM oracle.dual;
• 使用NEXT_DAY函数用于获取给定日期的下一个指定的星期几是几号
• SELECT oracle.NEXT_DAY(NOW(), ‘FRIDAY’) FROM oracle.dual;
orafce实现空值处理函数
• NVL函数
• select oracle.nvl(comm,0) from emp;
• NVL2函数
• SELECT comm,oracle.NVL2(comm, ‘NOT NULL’, ‘IS NULL’) FROM emp;
• 检查第一个参数是否为NULL,如果不为NULL则返回第二个参数,否则返回第三个参数。
orafce实现字符处理函数
• INSTR 函数为例,用于查找子字符串在字符串中出现的位置
• SELECT oracle.INSTR(‘PostgreSQL is fun’, ‘is’) FROM oracle.dual;
• NVL2函数
• SELECT comm,oracle.NVL2(comm, ‘NOT NULL’, ‘IS NULL’) FROM emp;
• 检查第一个参数是否为NULL,如果不为NULL则返回第二个参数,否则返回第三个参数。
orafce官方帮助网站
官方软件下载和帮助网站。
https://github.com/orafce/orafce

PostgreSQL中文社区认证
与工信部人才交流中心合作,推出PostgreSQL初/中/高级证书,证书中明确指定适用于信息技术应用创新人才岗位能力评定要求。


PostgreSQL从入门到精通,
系列课程始于23年初,
在周日19:30与大家分享PG技术,
从基础的PG介绍与安装,
到后续的调优、流复制等企业应用,
涉及90多个知识点的介绍与演示,
截至25年8月9日,
系列课程已讲100期,
欢迎继续关注PostgreSQL技术大讲堂,
如果你也有意学习PostgreSQL,
可以联系客服,领取相关资料。

·2025年11月份工信部人才交流中心PostgreSQL能力认证证书
·工信部人才交流中心PostgreSQL能力认证证书【10月25日】
· 6月6日证书 – 工信部人才交流中心PostgreSQL中级高级认证
· 关于举办PostgreSQL数据库管理人才研修与评测班(二期)的通知
· 榜上有名!2024年工业和信息化重点领域人才能力评价支撑机构
·关于举办PostgreSQL数据库管理人才研修与评测班的通知
夜雨聆风