Boa tarde…
Eu estou fazendo alguns ajustes em uma base quando me deparei com a seguinte situação:
DATA_PRECISION = NULL
Fiz um select na tabela all_tab_columns, com os filtros normais (table_name, owner, column_name). Foi retornado a coluna que eu avia selecionado, porém com o campo data_precision = null. A coluna é do tipo number.
Curioso fiz um desc na tabela.
E o desc retornou number(38 ) para a coluna.
Esta base é origem para um projeto de ODI e quando eu faço a engenharia reversa, o campo retorna com tamanho 0 e precisão -127.
Este erro é do Oracle ? Tem alguma forma de solucioná-lo?
[code]select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production [/code]
Afonso,
Tudo bem?
Eu entendo que o campo DATA_PRECISION pode apresentar valor NULL quando você cria uma coluna do tipo NUMBER, sem especificar o total de colunas e casas decimais.
Faça este teste:
1) Crie uma tabela
CREATE TABLE EXEMPLO
(A NUMBER(5,2),
B NUMBER(38),
C NUMBER);
2) Consulte como estas colunas ficam no dicionario de dados com a querie abaixo:
SELECT TABLE_NAME, COLUMN_NAME, DATA_LENGTH, DATA_PRECISION, DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EXEMPLO'
Note que para a coluna "C" da tabela "EXEMPLO" o campo DATA_PRECISION não apresenta valor. Desta forma, acho que você pode entender que um campo com DATA_LENGTH =22, DATA_PRECISION=NULL e DATA_SCALE=NULL deve ser entendido como uma coluna do tipo "NUMBER", sem precisão de casas.
Eu prefiro sempre criar colunas especificando o total de digitos inteiros e decimais.
Abraços e espero ter podido ajudar você a esclarecer esta dúvida.
Sergio Coutinho