16 - Tipos de datos numéricos |
Trabajamos con la tabla "libros" de una librería.
Eliminamos la tabla:
drop table libros;
Creamos la tabla con la siguiente estructura:
create table libros( codigo number(5) not null, titulo varchar2(40) not null, autor varchar2(30), editorial varchar2(15), precio number(6,2), cantidad number(4) );
Note que definimos el campo "codigo" de tipo "number(5)", esto es porque estimamos que no tendremos más de 99999 libros, y no colocamos decimales porque necesitamos números enteros.
Como en el campo "precio" no almacenaremos valores mayores a 9999.99, definimos el campo de tipo "number(6,2)".
El tipo "float" no es adecuado para representar precios porque no es exacto.
Como los valores para el campo "cantidad" no superarán los 9999, definimos el campo de tipo "number(4)", no colocamos decimales porque necesitamos valores enteros.
Analicemos la inserción de datos numéricos.
Intentemos ingresar un valor para "cantidad" fuera del rango definido:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad) values(1,'El aleph','Borges','Emece',25.60,50000);
aparece un mensaje de error y la inserción no se ejecuta.
Ingresamos un valor para "cantidad" con decimales:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad) values(1,'El aleph','Borges','Emece',25.60,100.2);
Lo acepta, veamos qué se almacenó:
select *from libros;
Truncó el valor.
Ingresamos un precio con 3 decimales:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad) values(2,'Don quijote','Cervantes','Emece',25.123,100);
Lo acepta, veamos qué se almacenó:
select *from libros;
Truncó el valor.
Intentamos ingresar un código con comillas (una cadena):
insert into libros (codigo,titulo,autor,editorial,precio,cantidad) values(4,'Uno','Richard Bach','Planeta','50',100);
Oracle lo convierte a número.
Intentamos ingresar una cadena que Oracle no pueda convertir a valor numérico en el campo "precio":
insert into libros (codigo,titulo,autor,editorial,precio,cantidad) values(5,'Alicia en el pais...','Lewis Carroll','Planeta','50.30',200);
Error.