【发布时间】:2019-11-26 00:18:21
【问题描述】:
我在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;
..给出:
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;
..给出:
ORA-01790: expression must have same datatype as corresponding expression
【问题讨论】:
-
如果去掉双引号会怎样?也许甲骨文以某种方式计算它们。
-
SELECT "FIELD_NAME_THAT_IS_29_CHAR_XX" FROM dual可能不起作用,因为 dual 没有该字段。 -
它给出了同样的错误,带或不带引号。
-
@Adder -
dual不能那样工作。 -
dual就是这样工作的。它给出了错误invalid identifier。