新手问题:代码行以列名 null 结尾。如何在这一行的末尾添加评论?
Newbie question: Code line ends with column name null. How to add comment at the end of this line?
下面我们进行简单的查询。
select job_id, employee_id, null --comment here
from employees
union all
select job_id, employee_id, end_date
from job_history
order by 2
当我试图在第一行末尾写一些评论时,
comment 成为列别名的一部分。
此示例的结果是第三列的列名,如下所示:
NULL--COMMENTHERE
我在评论前使用--
或/* */
都没有关系。
我很好奇这是什么原因?
我在使用 Oracle 时遇到的一个问题是,如果您在声明 FROM table 之前添加注释,它会破坏语法并引发错误 "Expecting FROM keyword"。因此,我建议您将评论移至 after 您的 FROM table 语句,或使用 /* comment */
,或在某处添加多行注释,给出更深入的解释,而不是直接将注释添加到 select 语句。
select job_id, employee_id, null --comment here
from employees
union all
select job_id, employee_id, end_date
from job_history
order by 2
以上代码来自您的问题,破坏了 Oracle 语法。
select job_id, employee_id, null from employees -- comment here
union all
select job_id, employee_id, end_date
from job_history
order by 2
这有效。
SQL fiddle: http://sqlfiddle.com/#!4/7dd91d/19
并且由于您标记了 oracle,
来源:https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/comment.htm#LNPLS01308
让我们将问题剥离到最低限度并删除 UNION
,其他列并使用 DUAL
table:
SELECT DUMMY -- comment
FROM DUAL;
这输出:
| DUMMY |
|-------|
| X |
语句引用了 table 中的列,因此列名将用作语句输出中的别名。
但是,如果我们不引用列并使用文字:
SELECT NULL -- comment
FROM DUAL;
这将输出:
| NULL--COMMENT |
|---------------|
| X |
并且 Oracle 将从 SQL 语句的文本生成列名,输出中列的别名将是 SELECT
和 [=23] 之间的查询文本=] 关键字,因此名称将是 NULL -- comment
,去掉空格。
所以 SELECT NULL FROM DUAL
会有一个列名 NULL
。
具有其他文字值的稍微复杂的版本:
SELECT NULL --comment here
, NULL /* other comment */,
'LITERAL' -- third comment
, 0 /* fourth comment */
FROM DUAL
None 生成的列引用了 table 的命名列,因此 Oracle 将从 SQL 生成名称并输出:
| NULL--COMMENTHERE | NULL/*OTHERCOMMENT*/ | 'LITERAL'--THIRDCOMMENT | 0/*FOURTHCOMMENT*/ |
|-------------------|----------------------|-------------------------|--------------------|
| (null) | (null) | LITERAL | 0 |
您可以看到列名是从 SQL 语句 select 子句列表生成的,用逗号分隔。
带有 UNION
的 SQL 语句将从第一个 SELECT
子句(UNION
之前)获取列名,因此:
SELECT NULL -- comment
FROM DUAL
UNION ALL
SELECT DUMMY
FROM DUAL;
输出:
| NULL--COMMENT |
|---------------|
| (null) |
| X |
列名将来自第一个语句,而不是来自引用列的第二个语句(UNION
下方)。
如果要覆盖默认列名,请使用别名:
SELECT NULL "NULL" --comment here
, NULL AS other /* other comment */,
'LITERAL' AS literal -- third comment
, 0 AS "0" /* fourth comment */
FROM DUAL
输出:
| NULL | other | LITERAL | 0 |
|--------|--------|---------|---|
| (null) | (null) | LITERAL | 0 |
并且使用了别名并且忽略了注释。
下面我们进行简单的查询。
select job_id, employee_id, null --comment here
from employees
union all
select job_id, employee_id, end_date
from job_history
order by 2
当我试图在第一行末尾写一些评论时, comment 成为列别名的一部分。
此示例的结果是第三列的列名,如下所示:
NULL--COMMENTHERE
我在评论前使用
--
或/* */
都没有关系。
我很好奇这是什么原因?
我在使用 Oracle 时遇到的一个问题是,如果您在声明 FROM table 之前添加注释,它会破坏语法并引发错误 "Expecting FROM keyword"。因此,我建议您将评论移至 after 您的 FROM table 语句,或使用 /* comment */
,或在某处添加多行注释,给出更深入的解释,而不是直接将注释添加到 select 语句。
select job_id, employee_id, null --comment here
from employees
union all
select job_id, employee_id, end_date
from job_history
order by 2
以上代码来自您的问题,破坏了 Oracle 语法。
select job_id, employee_id, null from employees -- comment here
union all
select job_id, employee_id, end_date
from job_history
order by 2
这有效。
SQL fiddle: http://sqlfiddle.com/#!4/7dd91d/19
并且由于您标记了 oracle,
来源:https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/comment.htm#LNPLS01308
让我们将问题剥离到最低限度并删除 UNION
,其他列并使用 DUAL
table:
SELECT DUMMY -- comment
FROM DUAL;
这输出:
| DUMMY |
|-------|
| X |
语句引用了 table 中的列,因此列名将用作语句输出中的别名。
但是,如果我们不引用列并使用文字:
SELECT NULL -- comment
FROM DUAL;
这将输出:
| NULL--COMMENT |
|---------------|
| X |
并且 Oracle 将从 SQL 语句的文本生成列名,输出中列的别名将是 SELECT
和 [=23] 之间的查询文本=] 关键字,因此名称将是 NULL -- comment
,去掉空格。
所以 SELECT NULL FROM DUAL
会有一个列名 NULL
。
具有其他文字值的稍微复杂的版本:
SELECT NULL --comment here
, NULL /* other comment */,
'LITERAL' -- third comment
, 0 /* fourth comment */
FROM DUAL
None 生成的列引用了 table 的命名列,因此 Oracle 将从 SQL 生成名称并输出:
| NULL--COMMENTHERE | NULL/*OTHERCOMMENT*/ | 'LITERAL'--THIRDCOMMENT | 0/*FOURTHCOMMENT*/ |
|-------------------|----------------------|-------------------------|--------------------|
| (null) | (null) | LITERAL | 0 |
您可以看到列名是从 SQL 语句 select 子句列表生成的,用逗号分隔。
带有 UNION
的 SQL 语句将从第一个 SELECT
子句(UNION
之前)获取列名,因此:
SELECT NULL -- comment
FROM DUAL
UNION ALL
SELECT DUMMY
FROM DUAL;
输出:
| NULL--COMMENT |
|---------------|
| (null) |
| X |
列名将来自第一个语句,而不是来自引用列的第二个语句(UNION
下方)。
如果要覆盖默认列名,请使用别名:
SELECT NULL "NULL" --comment here
, NULL AS other /* other comment */,
'LITERAL' AS literal -- third comment
, 0 AS "0" /* fourth comment */
FROM DUAL
输出:
| NULL | other | LITERAL | 0 |
|--------|--------|---------|---|
| (null) | (null) | LITERAL | 0 |
并且使用了别名并且忽略了注释。