如果
player_choice = ''
computer_choice = ''
def player_sign(player, computer):
choice = raw_input("Do you want to be X or O?: ").lower()
while choice != 'x' and choice != 'o':
print "Error!\n Wrong input!"
choice = raw_input("Do you want to be X or Y?: ").lower()
if choice == 'x':
print "X is yours!"
player = 'X'
computer = 'O'
return player, computer
elif choice == 'o':
print "You've chosen O!"
player = 'O'
computer = 'X'
return player, computer
else:
print "Error!\n Wrong input!"
return 0
player_sign(player_choice, computer_choice)
失败,并显示以下消息:
错误:ORA-00904:" ID":无效标识符
为什么不
SELECT ID FROM T2
失败? (它返回T1的所有条目)
是否可以更改此默认行为?
(运行相同的查询,但获取错误而不是所有行)
我有:
但是我们说我错误地使用SELECT *
FROM T1
WHERE ID IN
(
SELECT ID FROM T2
)
(请参阅上面的示例)而不是SELECT ID FROM T2
。在这种情况下,没有任何错误发生,因为我使用SELECT ID2 FROM T2
,但如果被SELECT ... IN SELECT ...
取代,它可能会产生重大损失。
答案 0 :(得分:4)
解释了行为in this question。
但你也问:“是否有可能改变这种默认行为? (运行相同的查询,但得到错误而不是所有行)“并在评论中扩展,”我想强制同一查询的失败,而不是更改查询以获得想要的结果“。
不,不可能改变行为。它正在做the documentation所说的应该做的事情:
Oracle通过查看子查询中指定的表,然后查找父语句中指定的表,解析子查询中的非限定列。
您无法停止查看父语句,只能解析子查询中的非限定别名。您必须更改查询才能使其出错。没有理由不来限定您的标识符,并且有充足的理由,包括它可以防止您屏蔽代码中的错误。
答案 1 :(得分:3)
是
SELECT *
FROM T1
WHERE ID IN
(
SELECT T2.ID FROM T2
)