fix(backend): Oracle 自定义规则 ORA-01036 + ORA-00933
两个 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 端跑自定义规则验证后追加(不阻塞提交)
Showing
Please register or sign in to comment