ORA-00972 식별자가 너무 긴 별칭 열 이름입니다.


81

다음과 같은 쿼리가 있습니다.

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

ORA-00972 identifier is too long 오류를 반환합니다 . 별칭을 짧게 만들지 않고 작동하도록하는 팁이 있습니까?

감사

답변:


104

아니요, Oracle 버전 12.2 이전에는 식별자 길이가 30자를 초과 할 수 없습니다. 참조 오라클 SQL 언어 참조 .

그러나 버전 12.2부터 최대 128 바이트까지 가능합니다. (참고 : 문자가 아닌 바이트).


23
호기심에서이 한계가 어디에서 왔는지 아는 사람이 있습니까? 한계가 완화되지 않은 이유는 무엇입니까? Oracle의 백만 달러를 지불하는 고객 중 어느 누구도 이러한 기능을 요청하지 않았다는 사실을 알게되었습니다. (이제 오해하지 마세요. 기술적 이유가
깊다고 확신

10
좋아, 나는 이렇게 물어볼 수 있었다 : stackoverflow.com/questions/1378133/…
phtrivier

나도 이런 상황에 직면했다. 이름 길이가 32 인 테이블 열이 있습니다. 그러나 도대체 테이블 열 이름은 30 자 이상이 허용되는 반면 동시에 식별자는 허용되지 않는 이유는 무엇입니까? 이러한 한계는 함께 가야합니다. 어떻게 이런 상황이 발생할 수 있습니까?
Vering

@Vering 30 자 이상입니까, 30 바이트 이상입니까? 마지막 문자가 멀티 바이트 인 경우 식별자가 30 바이트를 약간 넘을 수있는 이상한 버그가 있습니다.
Jon Heller

@JonHeller : 30/32 자 였을 거라고 확신합니다
Vering

12

이 오류는 또한 따옴표 및 단일 quto의 기발한 처리로 인해 발생합니다. 쿼리 내부에 작은 따옴표를 포함하려면, 사용은 두 배가 작은 따옴표를.

이것은 작동하지 않습니다

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;

마크 업은해야 내 예를 변경 뭔가 작은 따옴표 작은 따옴표 작은 따옴표는 따옴표 빨간색과 같다
마이크 커밍스

5

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

5

Argos보고 시스템을 프런트 엔드로 사용하고 Oracle을 뒤에 사용하고 있습니다. 방금이 오류가 발생했으며 시작 부분에 큰 따옴표가 있고 끝에 작은 따옴표가있는 문자열로 인해 발생했습니다. 큰 따옴표를 단일로 바꾸면 문제가 해결되었습니다.


0

최근에 springboot를 1.4.3으로 업그레이드 한 경우 yml 파일을 변경해야 할 수 있습니다.

1.3의 yml :

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

1.4.3의 yml :

jpa: 
  hibernate: 
    naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

-2

다른 사람들이 언급했듯이 Oracle SQL의 이름은 30 자 이하 여야합니다. 이 규칙은 테이블 이름뿐만 아니라 필드 이름에도 적용됩니다. 그래서 거기에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.