Bom dia,

passei por um problema que não imaginei que o Oracle (versão Oracle Database 11g Enterprise Edition Release 11.2.0.2.0) poderia deixar acontecer, foi executado um create table dessa forma:

CREATE TABLE TAB_Indice_Monetario (
A             DECIMAL(2,0) NOT NULL,
B             DATE NOT NULL,
C             DECIMAL(15,16) NOT NULL
);

Table Created

Por incrível que parece não deu erro de execução na instrução mesmo o DECIMAL sendo 15,16! A PRECISÃO MAIOR que a quantidade de ESCALA.

Como a empresa que trabalho usa padrão ANSI resolvi testar no SQL SERVER 2008R2 (versão SQL SERVER NT x64 – 10.50.2500.0) e vejam o resultado:

CREATE TABLE TAB_Indice_Monetario (
A             DECIMAL(2,0) NOT NULL,
B             DATE NOT NULL,
C             DECIMAL(15,16) NOT NULL
);

Msg 183, Level 15, State 1, Line 4
The scale (16) for column ‘C’ must be within the range 0 to 15.

Também testado no DB2 (versão DB2 9.5):

CREATE TABLE TAB_Indice_Monetario (
A             DECIMAL(2,0) NOT NULL,
B             DATE NOT NULL,
C             DECIMAL(15,16) NOT NULL
);

DB2 SQL Error: SQLCODE=-604, SQLSTATE=42611, SQLERRMC=DECIMAL(15,16), DRIVER=3.53.95 Comando: …

Para não imaginar que seria problema por utilizar DECIMAL (que é convertido nativamente para NUMBER) testei utilizando NUMBER e em todos ambientes ocorreu o mesmo resultado.

Essa doeu aí em Oracle?
Se alguém da Oracle ler isso podem reportar como BUG?

Obs.: Quando eu for dar minhas xingadas no SQL Server vou lembrar disso! eheheh

Att,
capin