2010-06-21 2 views
52

У меня есть запрос типа:ORA-00972 Идентификатор слишком длинный псевдоним имя столбца

SELECT column as averyveryveryverylongalias (more than 30 characters) FROM Table_name

возвращает ошибку ORA-00972 Идентификатор слишком длинный, есть ли наконечник, чтобы заставить его работать без сокращения псевдонима?

Благодаря

ответ

72

Нет, до Oracle версии 12.2, идентификаторы не могут превышать 30 символов в длину. См. the Oracle SQL Language Reference.

Однако from version 12.2 they can be up to 128 bytes long. (Примечание: байты, а не символы).

+15

Из любопытства, кто-нибудь знает, откуда это ограничение, и почему предел никогда не расслаблялся? Мне действительно кажется, что ни один из миллионных клиентов Oracle * никогда не запрашивал такую ​​функцию (теперь не поймите меня неправильно, я уверен, что есть некоторые глубокие технические причины, но все же ...) – phtrivier

+9

Хорошо, Я мог бы спросить SO: http://stackoverflow.com/questions/1378133/why-are-oracle-table-column-index-names-limited-to-30-characters – phtrivier

+0

Я также столкнулся с этой ситуацией. У меня есть столбец таблицы с именем length = 32. Но почему на самом деле имя столбца таблицы разрешено иметь более 30 символов, а в то же время идентификатор нет? Эти ограничения должны идти рука об руку, верно?Как эта ситуация может возникнуть вообще? – Vering

4

Объект, в котором Oracle хранит имя идентификаторов (например, имена таблиц пользователя хранятся в таблице с именем USER_TABLES, а имена столбцов пользователя хранятся в таблице с именем USER_TAB_COLUMNS), имеют NAME столбцы (например table_name в user_tables) размера VARCHAR2 (30) ... и это равномерное через все системные таблицы объектов или идентификаторов -

DBA_ALL_TABLES   ALL_ALL_TABLES  USER_ALL_TABLES 
DBA_PARTIAL_DROP_TABS ALL_PARTIAL_DROP_TABS USER_PARTIAL_DROP_TABS 
DBA_PART_TABLES  ALL_PART_TABLES  USER_PART_TABLES 
DBA_TABLES    ALL_TABLES   USER_TABLES   
DBA_TABLESPACES  USER_TABLESPACES  TAB 
DBA_TAB_COLUMNS  ALL_TAB_COLUMNS   USER_TAB_COLUMNS 
DBA_TAB_COLS   ALL_TAB_COLS   USER_TAB_COLS 
DBA_TAB_COMMENTS  ALL_TAB_COMMENTS  USER_TAB_COMMENTS 
DBA_TAB_HISTOGRAMS ALL_TAB_HISTOGRAMS  USER_TAB_HISTOGRAMS 
DBA_TAB_MODIFICATIONS ALL_TAB_MODIFICATIONS USER_TAB_MODIFICATIONS 
DBA_TAB_PARTITIONS ALL_TAB_PARTITIONS  USER_TAB_PARTITIONS 
3

я использую систему отчетности Argos в качестве переднего конца и Oracle в назад. Я просто столкнулся с этой ошибкой, и она была вызвана строкой с двойной кавычкой в ​​начале и одной цитатой в конце. Замена двойной кавычки на один решила проблему.

10

Ошибка также вызвана причудливой обработкой котировок и отдельных qutoes. Чтобы включить одинарные кавычки внутри запроса, используйте удвоенные одинарные кавычки.

Это не будет работать

select dbms_xmlgen.getxml("Select ....") XML from dual; 

или это либо

select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual; 

, но это работает

select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual; 
+0

Разметка изменила мой пример, она должна быть чем-то равным одинарной кавычке. –

-1

Как уже называют имена в Oracle SQL должен быть меньше или равно 30 символам. Я бы добавил, что это правило применяется не только к именам таблиц, но и к именам полей. Итак, у вас это есть.

0

Если вы недавно обновили springboot до 1.4.3, вам, возможно, потребуется внести изменения в файл YML:

YML в 1,3:

jpa: 
    hibernate: 
    namingStrategy: org.hibernate.cfg.EJB3NamingStrategy 

YML в 1.4.3:

jpa: 
    hibernate: 
    naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
Смежные вопросы