我从 csv 文件导入数据并创建了一个新表。第一行是标题。
当我尝试对这些表运行一些简单查询时,我收到ORA-00904 无效标识符错误。
普通表和导入数据表的唯一区别是后者中的字段名是小写的,而在普通表中它们总是大写的。
这可能是错误的原因吗?
我从 csv 文件导入数据并创建了一个新表。第一行是标题。
当我尝试对这些表运行一些简单查询时,我收到ORA-00904 无效标识符错误。
普通表和导入数据表的唯一区别是后者中的字段名是小写的,而在普通表中它们总是大写的。
这可能是错误的原因吗?
当您""
在 DDL 中使用时,您可以使列名区分大小写。
所以如果 DDL 是这样的:
CREATE TABLE "DWH"."TEST_PROBA" ( "credit_num" VARCHAR2(11 BYTE) NOT NULL ENABLE,
"term_acc_open_date" DATE NOT NULL ENABLE,
"date_final_pmt_exp" DATE, "dpd_1" VARCHAR2(5 BYTE) NOT NULL ENABLE,
"dpd_2" VARCHAR2(5 BYTE) NOT NULL ENABLE,
"dpd_3" VARCHAR2(5 BYTE) NOT NULL ENABLE,
"dpd_4" VARCHAR2(5 BYTE) NOT NULL ENABLE,
etc
然后你需要像这样查询:
SELECT "credit_num", "term_acc_open_date", etc...
FROM "TEST_PROBA"
如果您以小写形式创建列名(只能使用双引号来完成),您也必须以这种方式引用它们。
由于 Oracle 大写不带引号的标识符的方式,您必须在使用它们的任何地方用双引号将列名括起来。使用您提供的 DDL 的快速示例:
Oracle 11g R2 模式设置:
CREATE TABLE "TEST_PROBA" (
"credit_num" VARCHAR2(11 BYTE) NOT NULL ENABLE
, "term_acc_open_date" DATE NOT NULL ENABLE
, "date_final_pmt_exp" DATE
, "dpd_1" VARCHAR2(5 BYTE) NOT NULL ENABLE
)
/
INSERT INTO test_proba (
"credit_num"
, "term_acc_open_date"
, "date_final_pmt_exp"
, "dpd_1"
)
VALUES (
'12341234123'
, SYSDATE
, SYSDATE+1
, 'foo'
)
/
COMMIT
/
查询 1:
SELECT "credit_num"
FROM test_proba
结果:
| CREDIT_NUM |
---------------
| 12341234123 |
请注意,SELECT "credit_num"
有效而SELECT credit_num
无效,并且会产生您上面提到的 ORA-00904 错误。