抱歉,这很琐碎,但是选择带有*
符号的列并不总是有效,而且我找不到这种行为的引用。
我可以使用以下语句选择表A
和列col
:
select * from A;
和select col from A;
和select aa.col,aa.* from A aa;
但是我不能一起查看:
select *,col from A;
将导致错误ORA-00923: FROM keyword not found
select col,* from A aa;
将导致错误ORA-00936: missing expression
为什么我必须对*
符号使用别名?
select col,aa.* from A aa;
为什么错误如此令人误解?
答案 0 :(得分:6)
答案 1 :(得分:3)
最外面的路径本身显示了普通的,无前缀的*
全列通配符,并且没有循环返回其他列表达式-所有带有逗号(以单独的术语表示)的路径都是不同的从那条简单的*
路径开始。
在允许的内部路径上,因此允许使用多个表达式,因此只能使用以表/视图/别名为前缀的.*
,然后可以跟随(或在前面) )与其他表达式。
(我真的以为在某个地方可以更清楚地说明这一点,但是我在最近的文档中都找不到它...)
为什么我必须对*符号使用别名?
select col,aa.* from A aa;
那不是相当准确;您不必使用别名,如果没有别名,则可以直接使用表名,因此这也是有效的:
select col,A.* from A;
有种思路,无论如何,至少不应该使用通配符,除非是临时查询,否则最好不要使用通配符-最好明确列出所有必需的列名,并以适当的表名/别名为前缀如果存在联接,则为清楚起见并避免修改表时出现意外问题。 * 8-)
答案 2 :(得分:1)
为什么错误如此令人误解?
错误是正确的。他们只是猜不到您要做什么。之后
select *
下一个关键字应为from
,因此其他任何内容都会提供
FROM keyword not found where expected
在,
之后,应该有一个有效的表达式,例如列名,而不是*
,这是意外的,所以您得到
ORA-00936: missing expression
如果Oracle编写了有关错误使用*
的特殊错误消息,也许很好,但是到目前为止,还没有。您可以在Oracle Database Ideas论坛上提出建议。