我正在处理一些写得不好的遗留SQL。有些含糊不清的选择似乎产生了我们期望的大部分结果,但并非总是如此。
以下是我所说的简化示例:
create table T1(
A VARCHAR2(10),
B VARCHAR2(10),
C VARCHAR2(10),
D VARCHAR2(10)
)
create table T2(
A VARCHAR2(10),
B VARCHAR2(10)
)
insert into T1(A, B, C, D)
values ('AA', 'BB', 'CC', 'DD' )
insert into T2(A, B)
values ('Y', 'N' )
到目前为止,没有什么不寻常的,除了正在使用的查询...
SELECT * FROM T1, T2 WHERE T2.A ='Y' A B C D A_1 B_1 AA BB CC DD Y N SELECT * FROM T2, T1 WHERE T2.A ='Y' A B A_1 B_1 C D Y N AA BB CC DD
这显然是模棱两可的,Oracle试图通过在需要的地方重新指定带后缀_1的列来帮助我们。是否存在Oracle以不同方式处理此问题的情况?例如,不同版本等
例如,在第一个查询中,字段A的值为“AA”,但是可能存在相同查询将字段A设置为“Y”的情况?
现有的代码库到处都有这种东西,需要修复,现在我只是想评估这个问题有多严重?我主要担心的是,针对不同Oracle版本运行的相同SQL可能会提供不同的结果。
谢谢!
编辑:要明确该计划是消除查询的歧义。目前问题是不同版本的Oracle将如何处理这个问题?
答案 0 :(得分:2)
如果可能,您应该仔细检查代码并显式设置列名和别名,并对通过列索引访问结果集的任何代码执行相同的操作。以下链接中的答案说明了您对当前情况的不满:
当然,我知道一些开发者的暗示会暗示,“如果没有破坏,就不要修理它”,但你不是那个人,对吗?