orafce
模拟 Oracle RDBMS 的一部分函数和包的函数和运算符
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
orafce | 4.16.5 | SIM | BSD 0-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9100 | orafce | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | oracle_fdw pgtt session_variable pg_statement_rollback pg_dbms_metadata pg_dbms_lock pg_dbms_job db_migrator |
|---|
el llvmjit deps break
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 4.16.5 | 1817161514 | orafce | - |
| RPM | PGDG | 4.16.5 | 1817161514 | orafce_$v | - |
| DEB | PGDG | 4.16.5 | 1817161514 | postgresql-$v-orafce | - |
安装
您可以直接安装 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;
用法
日期函数
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 兼容的 varchar2 和 nvarchar2 数据类型,分别以字节(varchar2)或字符(nvarchar2)为单位强制执行声明的长度。