Nome de Objeto Acima de 30 bytes - Oracle Database 12c R2

Olá pessoal,

Antes do Oracle Database 12c Release 2, o padrão para criação de nome de objeto estava limitado a 30 bytes. Mas, agora com Oracle Database 12c R2 o nome de identificador de objetos passa a ser acima de 30 bytes, podendo chegar até 128 bytes.

Por exemplo, no Oracle Database 12c Release 1 se tentarmos criar uma tabela com nome acima de 30 bytes, tomaremos o erro: ORA-00972: identificador muito longo, veja:

Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 

SQL> 
SQL> create table Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2
  2  (col_Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2 number);
 
create table Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2
(col_Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2 number)
 
ORA-00972: identificador muito longo
 
SQL> 

Já no Oracle Database 12c Release 2 conseguimos executar o create acima sem problemas, porém, vale atentar:
  • Se o parâmetro COMPATIBLE for configurado para um valor de 12.2 ou superior, os nomes deverão ter de 1 a 128 bytes de comprimento, com algumas exceções que podem ser verificadas na documentação(Link no final do artigo) da Oracle.;
  • Agora se COMPATIBLE for definido com um valor menor que 12.2, os nomes deverão ter de 1 a 30 bytes.

Vamos agora criar a tabela com nome acima do valor padrão conhecido, 30 bytes:

[oracle@serv01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Mon Jul 30 17:22:00 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

Veja que o parâmetro de compatibilidade está definido para 12.2:

SQL> show parameter COMPATIBLE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      12.2.0
noncdb_compatible                    boolean     FALSE
SQL>

Então neste caso conseguimos criar nossa tabela sem problemas:

SQL> create table Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2
(col_Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2 number);  

Table created.

SQL>

Repare que criamos a tabela, bem como o nome da coluna acima do padrão de 30 bytes:

SQL> desc Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL_ESTAMOS_CRIANDO_UMA_TABELA_ACIMA_DE_T          NUMBER
 RINTA_BYTES_NO_ORACLE_DATABASE_12_2

SQL>
SQL> insert into Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2 values (1);

1 row created.

SQL> select * from Estamos_Criando_Uma_Tabela_Acima_de_Trinta_Bytes_No_Oracle_Database_12_2;

COL_ESTAMOS_CRIANDO_UMA_TABELA_ACIMA_DE_TRINTA_BYTES_NO_ORACLE_DATABASE_12_2
----------------------------------------------------------------------------
                                                                           1

SQL>

Para maiores informações:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/Database-Object-Names-and-Qualifiers.html#GUID-05F1B577-C08C-4DB9-925A-8799C76ADFF4

Ronaldo.

Nenhum comentário:

Postar um comentário