Странная ошибка Oracle: слишком длинный идентификатор ORA-00972 - PullRequest
11 голосов
/ 01 ноября 2011

Я столкнулся с этой проблемой при работе с ORACLE 10g. Я прочитал ответы на этот вопрос здесь ( ora-00972 идентификатор слишком длинный оракул 10g ) при переполнении стека, но они не сработали для меня. Возможно, у меня другая ситуация.

Теперь у меня были следующие имена таблиц: WIMAX_TRAFFIC_STATS и WIMAX_RADIO_STATS. Когда я попытался вставить в них данные через ODBC-соединение с Erlang/OTP, я получил ошибку:

{error,"[DataDirect][ODBC Oracle Wire Protocol driver][Oracle]ORA-00972: <br>identifier is toolong SQLSTATE IS: HY000"}
Итак, я искал в Google и нашел ответы о том, что, возможно, имена моих таблиц слишком длинные. Итак, я сделал это ниже и попробовал еще раз:
SQL> ALTER TABLE WIMAX_RADIO_STATS RENAME TO WR;
Table altered.
SQL> ALTER TABLE WIMAX_TRAFFIC_STATS RENAME TO WT;
Table altered.
Я все еще получаю ту же ошибку. Другие источники говорят, что это могут быть данные, которые я пишу в некоторых из моих столбцов. Мои определения таблиц здесь ниже:

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 символов, но все еще получаю эту ошибку. Помогите, пожалуйста, по телу!

EDIT

Запрос запроса SAMPLE выглядит следующим образом:

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

Поле SDATE по умолчанию установлено как sysdate

1 Ответ

23 голосов
/ 01 ноября 2011

Вы используете неправильные кавычки.

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.
...