我必须执行一些用户创建的 SQL 并显示其结果。一个示例 SQL 可能是这样的:
SELECT t1.*, t2.* FROM table1 t1, table2 t2, where table1.id = table2.id
这个 SQL 工作正常,但我需要手动添加分页并显示 rownum,所以 SQL 最终是这样的。
SELECT z.*
FROM(
SELECT y.*, ROWNUM rn
FROM (
SELECT t1.*, t2.* FROM table1 t1, table2 t2, where table1.id = table2.id
) y
WHERE ROWNUM <= 50) z
WHERE rn > 0
这会引发异常:“ORA-00918: column ambiguously defined”,因为 Table1 和 Table2 都包含具有相同名称(“id”)的字段。
避免这种情况的最佳方法是什么?
问候。
- 更新
最后,我们不得不采用丑陋的方式,在执行它们之前解析每个 SQL。基本上,我们解决了星号以发现我们需要添加哪些字段,并使用唯一 id 为每个字段设置别名。这引入了性能损失,但我们的客户明白这是给定要求的唯一选择。
我将标记 Lex 答案,因为它是我们最终研究的解决方案。