十章工程目录
2. DDL 与数据库对象
- Oracle SQL 治理检查:COLUMN ADD NOT NULL REQUIRE DEFAULT · none · unverified
- Oracle SQL 治理检查:COLUMN COMMENT · none · unverified
- Oracle SQL 治理检查:COLUMN MAXIMUM CHARACTER LENGTH · none · unverified
- Oracle SQL 治理检查:COLUMN MAXIMUM VARCHAR LENGTH · none · unverified
- Oracle SQL 治理检查:COLUMN NO NULL · none · unverified
- Oracle SQL 治理检查:COLUMN REQUIRE DEFAULT · none · unverified
- Oracle SQL 治理检查:COLUMN REQUIRED · none · unverified
- Oracle SQL 治理检查:COLUMN TYPE DISALLOW LIST · none · unverified
3. 查询与结果语义
- CONNECT BY 层次查询 · none · doc_based
- LEVEL 层次伪列 · none · doc_based
- (+) 传统外连接标记 · none · doc_based
- Oracle SQL 治理检查:STATEMENT WHERE REQUIRE SELECT · none · unverified
- ROWNUM 伪列 · none · doc_based
- SYS_CONNECT_BY_PATH 层次路径函数 · none · doc_based
- ORDER SIBLINGS BY 子句 · none · doc_based
- Oracle SQL 兼容检查:XML COLTYPE · full · unverified
4. DML 与数据写入
- Oracle SQL 治理检查:STATEMENT INSERT MUST SPECIFY COLUMN · none · unverified
- Oracle SQL 治理检查:STATEMENT WHERE REQUIRE UPDATE DELETE · none · unverified
5. 函数与表达式
- DECODE 函数 · none · doc_based
- SYS_CONTEXT 函数 · none · doc_based
- GROUP_ID / GROUPING_ID 分组函数 · full · unverified
6. 事务与并发
- Oracle SQL 治理检查:BUILTIN PRIOR BACKUP CHECK · none · unverified
- Oracle SQL 治理检查:STATEMENT DISALLOW TRUNCATE · none · unverified
- Oracle SQL 治理检查:STATEMENT DML DRY RUN · none · unverified
7. PL/SQL 与存储程序
- DBMS_OUTPUT 调试输出调用 · none · doc_based
- Oracle PL/SQL 兼容检查:ALTER SEQUENCE RESTART · full · unverified
- Oracle PL/SQL 兼容检查:CAST MULTISET SUBQUERY · full · unverified
- Oracle PL/SQL 兼容检查:CHECK CONSTRAINT IS JSON · full · unverified
- Oracle PL/SQL 兼容检查:JSON TABLE REF · full · unverified
- Oracle PL/SQL 兼容检查:LOCK TABLE STMT · full · unverified
- Oracle SQL 兼容检查:CAST MULTISET SUBQUERY · full · unverified
- Oracle SQL 兼容检查:JSON TABLE REF · full · unverified
8. 序列、同义词与触发器
- Oracle 对象兼容检查:SEQUENCE RESTART · full · unverified
9. 性能与分布式架构
- Oracle SQL 治理检查:STATEMENT SELECT NO SELECT ALL · none · unverified
- Oracle SQL 治理检查:STATEMENT WHERE DISALLOW FUNCTIONS AND CALCULATIONS · none · unverified
- Oracle SQL 治理检查:STATEMENT WHERE NO LEADING WILDCARD LIKE · none · unverified
10. 驱动与应用层
优先核对的高风险场景
CONNECT BY 层次查询
none · doc_based · 目标不保留原生层次句时改 WITH RECURSIVE,并先保留 Oracle 执行序:FROM/WHERE 中的 join 先形成候选关系,START WITH 与 CONNECT BY/PRIOR 再展开层次,剩余 WHERE 最后逐行过滤,不能提前裁掉不满足 WHERE 的父行及其仍应返回的子孙。锚点/递归成员生成 depth/path/visited,visited 必须使用稳定行身份与路径实例,不能用可重复业务键。NOCYCLE 在下一子行已是祖先时停止该边;CONNECT_BY_ISCYCLE 标记“当前行存在一个祖先子行”,不是标记或输出重复子行
LEVEL 层次伪列
none · doc_based · 树深度在递归 CTE 锚点置 depth=1、递归成员置 depth+1;纯行生成须区分根行契约:无 START WITH 且无其他根过滤时,Oracle 在 n<=0/NULL 仍保留 1 个根行,改为无条件产生 1 的递归 CTE 锚点、仅在下一层满足 LEVEL<=n 时递归,或给 generate_series 显式补该分支;有 START WITH/根过滤时才允许根行被过滤为零行
DECODE 函数
none · doc_based · 先用目标保证的物化屏障/临时结果/过程变量求 expr 一次,普通 CTE 不保证;按首个 search(数值首对按 Oracle 数值优先级)统一比较类型,再改有序 searched CASE/双 NULL,并把 result/default 转成首结果有效类型
(+) 传统外连接标记
none · doc_based · a.id = b.id(+) 保留 a,改 a LEFT JOIN b ON (...);marker 在左侧时按保留侧改 RIGHT JOIN 或交换表序后改 LEFT JOIN。同一可空表的全部 (+) 谓词(含 b.flag(+) = 常量)必须整体移入 ON, 留在 WHERE 会消掉 NULL 扩展行。含 OR/IN、同一表混合左右 marker、跨多表 marker 不一致或 NEW/OLD 伪表时只给人工方案,不自动重排连接图。
ROWNUM 伪列
none · doc_based · 投影编号先物化源表达式并按已确认的稳定顺序改 ROW_NUMBER();Top-N 必须区分同层 ORDER BY (Oracle 先赋 ROWNUM 再排序)与内层排序后外层限行,不能一律改 LIMIT。双层分页在内层排序并编号, 再由外层按范围过滤。直接查询块的 ROWNUM > 1、ROWNUM >= 2 或 ROWNUM = 2 通常为空集,禁止改成 OFFSET;只有已物化的内层 rn 别名范围谓词才能按上下界计算 OFFSET/LIMIT。
SYS_CONNECT_BY_PATH 层次路径函数
none · doc_based · 锚点用 separator||COALESCE(expr,'') 生成 path,递归成员同样按 Oracle NULL 拼接语义追加;迁移前预检节点值含 separator 并复现 ORA-30004,只有业务批准后才可转义并记录新契约
SYS_CONTEXT 函数
none · doc_based · USERENV 的 SESSION_USER -> session_user、CURRENT_USER -> current_user、 CURRENT_SCHEMA -> current_schema、DB_NAME/DB_UNIQUE_NAME -> current_database(); IP_ADDRESS 可在连接拓扑明确时映射 inet_client_addr()。 OS_USER、CLIENT_IDENTIFIER、AUTHENTICATED_IDENTITY、PROXY_USER、BG_JOB_ID、HOST/SERVER_HOST 与 MODULE 只能做近似映射,不能把 OS_USER/CLIENT_IDENTIFIER 当 session_user,或把 BG_JOB_ID 当 pg_backend_pid() 冒充等价。自定义 namespace 必须追踪 DBMS_SESSION.SET_CONTEXT 写入链并重设计。
ORDER SIBLINGS BY 子句
none · doc_based · 按父路径实例(稳定父行身份+递归路径,而非可重复 parent_key)计算 sibling_rank,原排序表达式后追加唯一键;递归追加到 order_path 并最终排序
DBMS_OUTPUT 调试输出调用
none · doc_based · 目标提供兼容包(如 orafce dbms_output)时优先保留 DBMS_OUTPUT 并逐方法核对;纯 PostgreSQL 中,独立 PUT_LINE(expr) 可在复刻 Oracle 输出转换后人工改 RAISE NOTICE '%', COALESCE(expr_text, ''), 且字面 % 必须按格式规则转义;PUT_LINE(NULL) 必须输出空行,不能泄漏成
既有改造点明细
上线前验证清单
- 精确版本、模式、参数、字符集、时区与驱动元数据
- DDL 建删、数据值域、事务回滚、并发冲突与异常行为
- 执行计划、统计信息、分片键、跨分片事务与热点写入
- 改造前后结果集、性能基线、回退条件与复扫闭环