如果内部 SELECT 包含无效标识符,则强制外部 SELECT 失败
Force outer SELECT to fail if the inner SELECT contains an invalid identifier
如果
SELECT ID FROM T2
失败,并显示以下消息:
Error: ORA-00904: "ID": invalid identifier
为什么不会
SELECT *
FROM T1
WHERE ID IN
(
SELECT ID FROM T2
)
失败? (它 returns 来自 T1 的所有条目)
是否可以更改此默认行为?
(运行 相同的查询,但得到错误而不是所有行)
我有:
- ID 为列的 T1
- 以 ID2 作为列的 T2(T2 不包含 ID)
但是假设我错误地使用了 SELECT ID FROM T2
(参见上面的示例)而不是 SELECT ID2 FROM T2
。在这种情况下没有发生任何错误,因为我使用 SELECT ... IN SELECT ...
,但如果将其替换为 DELETE ... IN SELECT ...
,它可能会产生重大损害。
是的。
SELECT *
FROM T1
WHERE ID IN
(
SELECT T2.ID FROM T2
)
解释行为 。
但您也问过:“是否可以更改此默认行为?
(运行 相同的查询,但得到的是错误而不是所有行)”,并在 "I want to force the failure for the same query, not to change the query to get the wanted result".
的评论中对其进行了扩展
不,无法更改行为。它正在做 the documentation 说它应该做的事:
Oracle resolves unqualified columns in the subquery by looking in the tables named in the subquery and then in the tables named in the parent statement.
你不能让它停止查看父语句而只解析子查询中的非限定别名。您将不得不更改查询以使其出错。没有理由 不 限定您的标识符,而且您应该这样做的原因有很多,包括它可以防止您掩盖代码中的错误。
如果
SELECT ID FROM T2
失败,并显示以下消息:
Error: ORA-00904: "ID": invalid identifier
为什么不会
SELECT *
FROM T1
WHERE ID IN
(
SELECT ID FROM T2
)
失败? (它 returns 来自 T1 的所有条目)
是否可以更改此默认行为?
(运行 相同的查询,但得到错误而不是所有行)
我有:
- ID 为列的 T1
- 以 ID2 作为列的 T2(T2 不包含 ID)
但是假设我错误地使用了 SELECT ID FROM T2
(参见上面的示例)而不是 SELECT ID2 FROM T2
。在这种情况下没有发生任何错误,因为我使用 SELECT ... IN SELECT ...
,但如果将其替换为 DELETE ... IN SELECT ...
,它可能会产生重大损害。
是的。
SELECT *
FROM T1
WHERE ID IN
(
SELECT T2.ID FROM T2
)
解释行为
但您也问过:“是否可以更改此默认行为? (运行 相同的查询,但得到的是错误而不是所有行)”,并在 "I want to force the failure for the same query, not to change the query to get the wanted result".
的评论中对其进行了扩展不,无法更改行为。它正在做 the documentation 说它应该做的事:
Oracle resolves unqualified columns in the subquery by looking in the tables named in the subquery and then in the tables named in the parent statement.
你不能让它停止查看父语句而只解析子查询中的非限定别名。您将不得不更改查询以使其出错。没有理由 不 限定您的标识符,而且您应该这样做的原因有很多,包括它可以防止您掩盖代码中的错误。