奇怪的Oracle错误:标识符太长ORA-00972

时间:2011-11-01 10:02:33

标签: sql oracle erlang odbc

使用ORACLE 10g时遇到了这个问题。我在这里阅读了这个问题的答案( ora-00972 identifier is too long oracle 10g )关于堆栈溢出,但它们对我没用。也许我的情况不同。

现在我有了这些表名:WIMAX_TRAFFIC_STATSWIMAX_RADIO_STATS。当我尝试通过带有 Erlang/OTP 的ODBC连接将数据插入到它们中时,我收到了错误:

{error,"[DataDirect][ODBC Oracle Wire Protocol driver][Oracle]ORA-00972: 
identifier is toolong SQLSTATE IS: HY000"}
所以,我搜索谷歌并找到答案说,也许我的表名太长了。所以我在下面做了这个并再次尝试:
SQL> ALTER TABLE WIMAX_RADIO_STATS RENAME TO WR;
Table altered.
SQL> ALTER TABLE WIMAX_TRAFFIC_STATS RENAME TO WT;
Table altered.
我仍然得到同样的错误。其他来源sya,它可能是我在我的一些专栏中写的数据。我的表格定义如下:


SQL> DESCRIBE WT;
 Name                                      Null?    Type
 ----------------------------------------- -------- -----------------
 SDATE                                              DATE
 ELEMENT_TYPE                                       VARCHAR2(50)
 MANAGED_ELEMENT                                    VARCHAR2(50)
 USER_LABEL                                         VARCHAR2(200)
 JOB_ID                                             VARCHAR2(50)
 MEAS_TYPE                                          VARCHAR2(50)
 MEAS_VALUE                                         VARCHAR2(50)

我在那里写的数据值都不比列长度定义长。我真的好奇。我试图在表中编写长度小于10个字符但仍然出现此错误的字符串。 请一些身体帮助!

修改

SAMPLE查询请求如下:

INSERT INTO WT(element_type,managed_element,user_label,job_id,meas_type,
meas_value) VALUES("BreezeMAX MBS",
"SubNetwork=ASN,MeContext=,ManagedElement=MBS.172.17.9.9",
"BMAX-Shoal2[MTN-Egate]",
"99297","rbMngmntPortPacketsDiscardedOnRx","0");

SDATE字段的默认设置为sysdate

1 个答案:

答案 0 :(得分:23)

您使用的是错误的引号。

VALUES('BreezeMAX MBS',
       ^             ^

演示:

SQL> create table t (a varchar(100));
Table created.

SQL> insert into t(a) values ("qasdqsdqsdqsdqsdqsdqsdlmqmsldqsmldqsmldq");
insert into t(a) values ("qasdqsdqsdqsdqsdqsdqsdlmqmsldqsmldqsmldq")
                         *
ERROR at line 1:
ORA-00972: identifier is too long

SQL> insert into t(a) values ('qasdqsdqsdqsdqsdqsdqsdlmqmsldqsmldqsmldq');
1 row created.