0

我从 csv 文件导入数据并创建了一个新表。第一行是标题。

当我尝试对这些表运行一些简单查询时,我收到ORA-00904 无效标识符错误。

普通表和导入数据表的唯一区别是后者中的字段名是小写的,而在普通表中它们总是大写的。

这可能是错误的原因吗?

4

2 回答 2

2

当您""在 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"
于 2013-02-28T08:56:41.767 回答
1

如果您以小写形式创建列名(只能使用双引号来完成),您也必须以这种方式引用它们。

由于 Oracle 大写不带引号的标识符的方式,您必须在使用它们的任何地方用双引号将列名括起来。使用您提供的 DDL 的快速示例:

SQL小提琴

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 错误。

于 2013-02-28T08:56:12.790 回答