关于 migrating-oracle-to-postgres-stored-procedures
用于将 Oracle PL/SQL 存储过程和函数转换为 PostgreSQL PL/pgSQL 的技能。它指导检查源代码与表结构,遵循明确的转换约束,并指定输出文件位置。
主要功能
- 01读取 Oracle 过程及表结构定义
- 02将 Oracle 语法转换为 PostgreSQL 对应写法
- 03保留签名和指定的控制流程
- 04检查排序规则及 UNION ALL 行为
- 05每个输出文件写入一个过程
适用场景
- 01将 Oracle 存储过程移植到 PostgreSQL
- 02结合目标表结构转换函数
- 03审查排序与排序规则选择
- 04按指定目录结构准备过程文件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill migrating-oracle-to-postgres-stored-procedures安装后在 Claude Code 中输入/migrating-oracle-to-postgres-stored-procedures确认已加载。
详细介绍
将存储过程从 Oracle 迁移到 PostgreSQL
将 Oracle PL/SQL 存储过程和函数转换为 PostgreSQL PL/pgSQL 等效实现。
工作流
Progress:
- [ ] Step 1: Read the Oracle source procedure
- [ ] Step 2: Translate to PostgreSQL PL/pgSQL
- [ ] Step 3: Write the migrated procedure to Postgres output directory
步骤 1:读取 Oracle 源过程
从 .github/oracle-to-postgres-migration/DDL/Oracle/Procedures and Functions/ 读取 Oracle 存储过程。查阅 .github/oracle-to-postgres-migration/DDL/Oracle/Tables and Views/ 中的 Oracle 表/视图定义以进行类型解析。
步骤 2:转换为 PostgreSQL PL/pgSQL
应用以下转换规则:
- 将所有 Oracle 特有语法转换为 PostgreSQL 等效语法。
- 保留原有功能和控制流逻辑。
- 保留类型锚定的输入参数(例如
PARAM_NAME IN table_name.column_name%TYPE)。 - 对于传递给其他过程的输出参数,使用显式类型(
NUMERIC、VARCHAR、INTEGER)——不要对这些参数使用类型锚定。 - 不要修改方法签名。
- 除非 Oracle 源中已存在,否则不要为对象名添加模式名前缀。
- 保持异常处理和回滚逻辑不变。
- 不要生成
COMMENT或GRANT语句。 - 对文本排序时有意应用排序规则:
- 仅当需要 Oracle 兼容的二进制排序且未指定其他排序顺序时,才使用
COLLATE "C"。 - 如果 Oracle 使用了显式的语言排序(例如
NLS_SORT = French),则映射到显式的 PostgreSQL 区域排序规则,而不是"C"。 - 使用
SELECT collname, collprovider, collcollate, collctype FROM pg_collation ORDER BY collname;来发现目标环境中的排序规则。
- 仅当需要 Oracle 兼容的二进制排序且未指定其他排序顺序时,才使用
- 将
UNION ALL视为审查检查点。按分支验证计划质量,如果合并分支的计划导致性能回退(例如对大表出现意外的顺序扫描),则进行重构。 - 当
orafce扩展能提升清晰度或保真度时,利用该扩展。
查阅 .github/oracle-to-postgres-migration/DDL/Postgres/{ProjectName}/Tables and Views/ 中的 PostgreSQL 表/视图定义以获取目标模式详细信息。
步骤 3:将迁移后的过程写入 Postgres 输出目录
将每个迁移后的过程放在 .github/oracle-to-postgres-migration/DDL/Postgres/{ProjectName}/Procedures and Functions/{PACKAGE_NAME_IF_APPLICABLE}/ 下的独立文件中。每个文件一个过程。
{ProjectName}是项目的程序集/文件夹名称,其中的空格规范化为-(例如MyApp.DataAccess)。这与 Agent 和其他迁移技能使用的路径一致。