用途:把 Oracle PL/SQL 存储过程和函数翻译为 PostgreSQL PL/pgSQL 等价实现,属于数据库迁移类技能。
主要能力与规则:翻译 Oracle 专有语法为 PostgreSQL 等价写法;保留原有功能与控制流逻辑;保留类型锚定的输入参数(如 PARAM_NAME IN table_name.column_name%TYPE);传给其他过程的输出参数使用显式类型(NUMERIC、VARCHAR、INTEGER),不做类型锚定;不修改方法签名;除非 Oracle 源码已有,否则不给对象名加 schema 前缀;异常处理与回滚逻辑保持不变;不生成 COMMENT 或 GRANT 语句。排序文本时按需应用排序规则:仅在需要 Oracle 兼容的二进制排序且未指定其他排序时使用 COLLATE "C";若 Oracle 使用显式语言排序(如 NLS_SORT = French),则映射为显式 PostgreSQL locale 排序规则而非 "C"。可用 SELECT collname, collprovider, collcollate, collctype FROM pg_collation ORDER BY collname; 查询目标环境的排序规则。将 UNION ALL 视为审查检查点,按分支验证执行计划质量,若合并分支规划导致退化(如大表出现意外顺序扫描)则重构。可借助 orafce 扩展提升清晰度或保真度。
使用方式(三步工作流):第一步,从 .github/oracle-to-postgres-migration/DDL/Oracle/Procedures and Functions/ 读取 Oracle 存储过程,并参考 .github/oracle-to-postgres-migration/DDL/Oracle/Tables and Views/ 的表/视图定义做类型解析。第二步,按上述规则翻译为 PL/pgSQL,并参考 .github/oracle-to-postgres-migration/DDL/Postgres/{ProjectName}/Tables and Views/ 的目标 schema 细节。第三步,将每个迁移后的过程单独写入 .github/oracle-to-postgres-migration/DDL/Postgres/{ProjectName}/Procedures and Functions/{PACKAGE_NAME_IF_APPLICABLE}/,一个过程一个文件。{ProjectName} 为项目程序集/文件夹名,空格规范化为 -(如 MyApp.DataAccess)。
适用场景:Oracle 到 PostgreSQL 的存储过程批量迁移、需要保持签名与调用兼容的数据库改造。
限制:资料未提供支持的 Oracle 语法覆盖范围、自动化程度、依赖工具版本、性能保证或收费信息;实际效果需结合目标环境验证。