ERRO ORACLE - DATA_PRECISION nulo

Este forum é destinado a perguntas relacionadas a Oracle, mas que não se enquadram nos forums acima. Aqui serão tratadas também sobre outras tecnologias da oracle, como o Workflow, BPEL, Spatial, OCS, etc.
Responder
afonso.augusto
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qui, 06 Jun 2013 2:06 pm

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?

Selecionar tudo

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                                           
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

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:

Selecionar tudo

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
afonso.augusto
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qui, 06 Jun 2013 2:06 pm

Obrigado Sergio,
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes