• Data Governance Dev's avatar
    fix(backend): Oracle 自定义规则 ORA-01036 + ORA-00933 · f4903d81
    Data Governance Dev authored
    两个 Oracle 专属问题,连续两次跑自定义规则暴露:
    
    1) ORA-01036: illegal variable name/number
       - 原因:sql_builder._placeholder 旧版 Oracle 路径输出 '?',但 python-oracledb
         不支持 qmark 占位符(thin 模式不会自动转 :N,必须显式给 numbered)
       - 修复:Bind 加 next_idx;Oracle 路径按递增编号输出 :1, :2, ...,与
         bind.params 顺序一一对应
    
    2) ORA-00933: SQL command not properly ended
       - 原因:step9_custom_rules 无条件拼 'LIMIT 200',Oracle 11g 不支持 LIMIT
         (12c 引入 FETCH FIRST;11g 只能用 WHERE ROWNUM <= N)
       - 修复:截断子句按 db_type 分支,Oracle 走 WHERE ROWNUM <= 200
    
    中间 bug:Oracle 分支漏写 WHERE 关键字(FROM "tbl" "col" LIKE :1 ...),
    静态验证脚本(三个方言各跑一遍)暴露后补上 WHERE。
    
    静态验证 SQL:
      MySQL  : SELECT `COL` FROM `TBL` WHERE `COL` LIKE %s ESCAPE '!' LIMIT 200
      达梦   : SELECT "COL" FROM "TBL" WHERE "COL" LIKE ?  ESCAPE '!' LIMIT 200
      Oracle : SELECT "COL" FROM "TBL" WHERE "COL" LIKE :1 ESCAPE '!' AND ROWNUM <= 200
    
    WORKLOG 待用户在 Oracle 端跑自定义规则验证后追加(不阻塞提交)
    f4903d81
sql_builder.py 6.17 KB