다음과 같은 쿼리가 있습니다.
SELECT column as averyveryveryverylongalias (more than 30 characters)
FROM Table_name
ORA-00972 identifier is too long 오류를 반환합니다 . 별칭을 짧게 만들지 않고 작동하도록하는 팁이 있습니까?
감사
답변:
아니요, Oracle 버전 12.2 이전에는 식별자 길이가 30자를 초과 할 수 없습니다. 참조 오라클 SQL 언어 참조 .
그러나 버전 12.2부터 최대 128 바이트까지 가능합니다. (참고 : 문자가 아닌 바이트).
이 오류는 또한 따옴표 및 단일 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;
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
다른 사람들이 언급했듯이 Oracle SQL의 이름은 30 자 이하 여야합니다. 이 규칙은 테이블 이름뿐만 아니라 필드 이름에도 적용됩니다. 그래서 거기에 있습니다.