2011-11-01 290 views
8

我在使用ORACLE 10g时遇到了这个问题。我在这里阅读了这个问题的答案(ora-00972 identifier is too long oracle 10g)堆栈溢出,但他们没有为我工作。也许我的情况是不同的。
奇怪的Oracle错误:标识符太长ORA-00972

现在我有这些表名:WIMAX_TRAFFIC_STATSWIMAX_RADIO_STATS。当我尝试通过ODBC连接向Erlang/OTP插入数据时,我得到了错误:

 
{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个字符的字符串,但仍然出现此错误。 一些身体的帮助,请!

编辑

样品查询请求如下:

 
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

+2

请提供错误的查询和数据。 –

回答

18

您使用了错误的报价设定。

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.