plisql

PL/iSQL 过程语言

概览

扩展包名版本分类许可证语言
ivorysql1.0SIMApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
9140ivorysql_orasys
9150ora_btree_ginsys
9160ora_btree_gistsys
9170pg_get_functiondef-
9180plisqlpg_catalog
9190gb18030_2022pg_catalog

from src/pl/plisql/src/plisql.control and IvorySQL package metadata

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.01817161514ivorysql-
RPMPIGSTY5.11817161514ivorysql5-
DEBPIGSTY5.11817161514ivorysql-5-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
el8.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
el9.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
el9.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
el10.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
el10.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS

安装

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

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

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

pig install ivorysql;          # 当前活跃 PG 版本安装
pig ext install -y ivorysql -v 18  # PG 18
dnf install -y ivorysql5       # PG 18
apt install -y ivorysql-5   # PG 18

创建扩展

CREATE EXTENSION plisql;

用法

plisql: PL/iSQL 过程语言

PL/iSQL 是 IvorySQL 项目提供的 PostgreSQL Oracle 兼容过程语言。它使用 Oracle PL/SQL 语法和语义扩展了 PL/pgSQL。

启用

CREATE EXTENSION plisql;

创建函数

CREATE OR REPLACE FUNCTION hello_world
RETURN VARCHAR2
AS
BEGIN
    RETURN 'Hello, World!';
END;
/

Oracle 风格过程

CREATE OR REPLACE PROCEDURE update_salary(
    p_emp_id IN NUMBER,
    p_amount IN NUMBER
)
AS
BEGIN
    UPDATE employees SET salary = salary + p_amount WHERE emp_id = p_emp_id;
END;
/

CALL update_salary(100, 5000);

关键特性

  • Oracle 风格 BEGIN...END
  • INOUTIN OUT 参数模式
  • Oracle 风格异常处理,带命名异常
  • %TYPE%ROWTYPE 属性引用
  • Oracle 兼容游标语法(CURSOR...ISOPENFETCHCLOSE
  • 函数声明中使用 RETURN 替代 RETURNS
  • 类包变量作用域

与 PL/pgSQL 的区别

  • 使用 AS 关键字替代 $$ 分隔符
  • 支持 Oracle 风格 / 作为语句终结符
  • 原生支持 VARCHAR2NUMBER 和其他 Oracle 类型
  • Oracle 兼容 DBMS_OUTPUT 集成

最后修改 2026-03-12: update extension pages (f579993)