一尘不染

如果内部SELECT包含无效的标识符,则强制外部SELECT失败

sql

如果

SELECT ID FROM T2

失败 并显示以下消息:

错误:ORA-00904:“ ID”:无效的标识符

为什么

SELECT * 
    FROM T1
    WHERE ID IN 
        ( 
            SELECT ID FROM T2
        )

失败了 吗?(它返回T1中的所有条目)

是否可以更改此默认行为?
(运行相同的查询,但收到错误而不是所有行)


我有:

  • ID为列的T1
  • 以ID2作为列的T2(T2不包含ID)

但可以说我使用SELECT ID FROM T2(请参见上面的示例)而不是SELECT ID2 FROM T2错误地使用。在这种情况下,不会发生任何错误,因为我使用了SELECT ... IN SELECT ...它,但是如果将其替换为,可能会造成重大损失DELETE ... IN SELECT ...


阅读 130

收藏
2021-05-16

共1个答案

一尘不染

但是您还问:“是否可以更改此默认行为?(运行相同的查询,但收到错误而不是所有行)”,并在注释中扩展了内容,“我想对同一查询强制失败,而不是更改查询以获取所需结果”。

不,不可能改变行为。它正在按照文档说的去做:

Oracle通过在子查询中命名的表中查找子查询,然后在父语句中命名的表中查找子查询中不合格的列。

您不能让它停止查看父语句,而只能解析子查询中的不合格别名。您将不得不更改查询以使其出错。没有理由
限定您的标识符,并且有很多理由要这样做,包括这样做可以防止您掩盖代码中的错误。

2021-05-16