使用ORACLE 10g时遇到了这个问题。我在这里阅读了这个问题的答案( ora-00972 identifier is too long oracle 10g )关于堆栈溢出,但它们对我没用。也许我的情况不同。
现在我有了这些表名:WIMAX_TRAFFIC_STATS
和WIMAX_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
答案 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.