从具有小写字段名称的表中进行选择时,标识符无效

时间:2013-02-28 08:27:38

标签: oracle oracle-sqldeveloper identifier

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

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

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

这可能是错误的原因吗?

2 个答案:

答案 0 :(得分:1)

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

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

SQL Fiddle

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

<强> Results

|  CREDIT_NUM |
---------------
| 12341234123 |

请注意SELECT "credit_num"有效,而SELECT credit_num没有,并且如上所述会产生ORA-00904错误。

答案 1 :(得分:1)

在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"