如果
SELECT ID FROM T2
失败 并显示以下消息:
错误:ORA-00904:“ ID”:无效的标识符
为什么 不
SELECT * FROM T1 WHERE ID IN ( SELECT ID FROM T2 )
失败了 吗?(它返回T1中的所有条目)
是否可以更改此默认行为? (运行相同的查询,但收到错误而不是所有行)
我有:
但可以说我使用SELECT ID FROM T2(请参见上面的示例)而不是SELECT ID2 FROM T2错误地使用。在这种情况下,不会发生任何错误,因为我使用了SELECT ... IN SELECT ...它,但是如果将其替换为,可能会造成重大损失DELETE ... IN SELECT ...。
SELECT ID2 FROM T2
SELECT ... IN SELECT ...
DELETE ... IN SELECT ...
但是您还问:“是否可以更改此默认行为?(运行相同的查询,但收到错误而不是所有行)”,并在注释中扩展了内容,“我想对同一查询强制失败,而不是更改查询以获取所需结果”。
不,不可能改变行为。它正在按照文档说的去做:
Oracle通过在子查询中命名的表中查找子查询,然后在父语句中命名的表中查找子查询中不合格的列。
您不能让它停止查看父语句,而只能解析子查询中的不合格别名。您将不得不更改查询以使其出错。没有理由 不 限定您的标识符,并且有很多理由要这样做,包括这样做可以防止您掩盖代码中的错误。