Oracle-列名的无效标识符

时间:2019-11-25 16:03:05

标签: sql oracle

我遇到一个NUMBER字段的有趣情况。

这是一个简化的示例。

当我选择一个特定字段时,恰好有29个字符长,这很好。

select FIELD_NAME_THAT_IS_29_CHAR_XX
from table;

在使用该查询的报表中,该查询不返回标头(这是eText类型的XML发布者报表)。但是,当我使用UNION运行查询时,选择标题名称,则会收到无效的标识符错误。

SELECT "FIELD_NAME_THAT_IS_29_CHAR_XX" FROM dual
UNION
SELECT FIELD_NAME_THAT_IS_29_CHAR_XX FROM table1;

返回:

ORA-00904: "LINE_RECEIPT_AMNT_AT_COST_USD": invalid identifier

Oracle DB中字段名称的最大长度为30个字符。我是否达到了此限制?我认为不是这样,例如:

SELECT "FIELD_NAME_THAT_IS_29_CHAR_XXxxxxx" FROM dual;

.. gives:

ORA-00972: identifier is too long

UNION有什么问题?

单引号也不起作用。这是一个NUMBER字段。

SELECT 'FIELD_NAME_THAT_IS_29_CHAR_XX' FROM dual
UNION
SELECT FIELD_NAME_THAT_IS_29_CHAR_XX FROM table1;

.. gives:

ORA-01790: expression must have same datatype as corresponding expression

2 个答案:

答案 0 :(得分:3)

问题出在双引号

Oracle SQL允许我们忽略数据库对象名称的大小写,只要我们创建它们时都使用大写的名称,或者不使用双引号即可。如果我们在脚本中使用大小写混合或小写并且将标识符括在双引号中,则当我们引用对象或其属性时,我们都被要求使用双引号和精确大小写:

请改为使用单引号,该单引号实际上是有效的,并且会为您提供所需的结果

http://sqlfiddle.com/#!4/dce84/4

答案 1 :(得分:1)

@Standin的答案将我引向解决方案。

由于所选字段是数字,所以只需将其转换为字符-加上单引号即可。

SELECT 'FIELD_NAME_THAT_IS_29_CHAR_XX' FROM dual
UNION
SELECT to_char(FIELD_NAME_THAT_IS_29_CHAR_XX) FROM table1;