Tablas

Publicado: julio 12, 2011 en Oracle

image

 

image

 

image

 

Tipos de datos

 

""Los tipos de datos soportados por Oracle se agrupan en los siguientes conjuntos.
Los valores alfanuméricos van encerrados entre comilla simple: ‘Alfanumérico’ Los valores numéricos son número simples: 123 Las fechas van encerradas entre comillas simples: ‘1/12/2000’ Los valores binarios no pueden ser representados (son fotos, videos…)

Tipo de dato CHAR(b)

Almacena cadenas de caracteres de longitud fija, desde 1 a 2.000 bytes de ocupación. El número de caracteres que se pueden almacenar se rige según la siguiente fórmula.
nº caracteres = bytes / character set Para ASCII, el conjunto de caracteres ocupa un byte, por lo que coincide el número de caracteres máximos con la ocupación del tipo de dato. Si se introduce un valor de 10 caracteres en un campo de CHAR(100), se rellenará con espacios las 90 posiciones restantes. Así la siguiente expresión es cierta:
‘Hola pepe’ = ‘Hola pepe ‘
Si se intenta introducir un valor demasiado grande para el campo, se intentará eliminar los espacios finales, y si cabe sin espacios, se introduce. Si aún así no cabe, se retorna un error.

Tipo de dato VARCHAR2(b)

Almacena cadenas de caracteres de longitud variable. Si se define una columna de longitud 100 bytes, y se introduce en ella un valor de 10 bytes, la columna ocupará 10 y no 100 como hacía con el tipo de dato CHAR.

Tipo de dato VARCHAR(b)

En Oracle8 es equivalente a VARCHAR2, en futuras versiones permitirá distintos criterios de comparación.

Tipo de dato NCHAR(b)

Almacena un valor alfanumérico de longitud fija con posibilidad de cambio de juego de caracteres. Puede almacenar tanto caracteres ASCII, EBCDIC, UNICODE…

Tipo de dato NVARCHAR2(b)

Almacena un valor alfanumérico de longitud variable con posibilidad de cambio de juego de caracteres. Puede almacenar tanto caracteres ASCII, EBCDIC, UNICODE…

Tipo de dato NUMBER(p,s)

Almacena valores numéricos en punto flotante que pueden ir desde 1.0 x 10-130 hasta 9.9…(38 nueves)… 9 x 10125. El almacenamiento interno de los valores numéricos en notación científica:
Mantisa x 10exponente
La mantisa puede contener cualquier número, entero o decimal, positivo o negativo. El exponente podrá contener cualquier número entero, positivo o negativo. El parámetro “p” indica la precisión (número de dígitos contando los decimales) que contendrá el número como máximo. Oracle garantiza los datos con precisiones de 1 a 38. El parámetro “s” indica la escala, esto es, el máximo de dígitos decimales. Hay que tener en cuenta que una columna definida NUMBER(10,5), podrá contener como máximo cualquier número siempre y cuando el número de dígitos enteros más el número de dígitos decimales no supere 10 (y no 15). La escala puede ir de -84 a 127. Para definir número enteros, se puede omitir el parámetro s o bien poner un 0 en su lugar. Se puede especificar una escala negativa, esto lo que hace es redondear el número indicado a las posiciones indicadas en la escala. Por ejemplo un número definido como NUMBER(5,-2), redondeará siempre a centenas. Así si intentamos introducir el valor 1355, en realidad se almacenará 1400.

Tipo de dato FLOAT(b)

Almacena un número en punto decimal sin restricción de dígitos decimales. El parámetro b indica la precisión binaria máxima que puede moverse en el rango 1 a 126. Si se emite el defecto será 126. Una columna FLOAT(126) es equivalente a una columna NUMBER(38), aunque la diferencia está en que la columna NUMBER no podrá contener decimales y la columna FLOAT si y en con cualquier escala.

Tipo de dato DATE

Almacena un valor de fecha y hora.
Para un tipo de dato DATE, Oracle almacena internamente los siguiente datos: ƒ Siglo ƒ Año ƒ Mes ƒ Día ƒ Hora ƒ Minuto ƒ Segundo
El formato por defecto de las fechas es: ‘DD-MON-YYYY’
Esto es: Dos dígitos para el día Las tres primeras siglas del año (depende del idioma instalado). Cuatro dígitos para el año.
Por ejemplo: ‘1-JAN-2001’ ó ‘2-DEC-1943’
Este formato puede ser alterado en cualquier momento.
Internamente un fecha se almacena como el número de días desde cierto punto de inicio (por ejemplo el año 0). Esto permite que las fechas puedan ser tratadas en operaciones aritméticas normales:
‘1-JAN-2001′ + 10 = ’11-JAN-2001’ ‘1-JAN-2000′ – 1 = ’31-DEC-1999′ ’10-MAY-2000’ – ‘1-MAY-2000’ = 9

Tipos de datos binarios

Permiten almacenar información en formato "crudo", valores binarios tal y como se almacenan en el disco duro o como residen en memoria. Estas columnas se pueden utilizar tanto para almacenar grandes cantidades de datos (hasta 4Gb.), como para almacenar directamente cualquier tipo de fichero (ejecutables, sonidos, videos, fotos, documentos Word, librerías…) o para transportar datos de una base de datos a otra, ya que el formato binario es el único formato común entre cualquier sistema informático.

Tipo de dato LONG

Almacena caracteres de longitud variable hasta 2 Gb. Este tipo de dato se soporta para compatibilidad con versiones anteriores. En Oracle8 y siguientes versiones se deben usar los tipos de datos CLOB y NLOB para almacenar grandes cantidades de datos alfanuméricos.

Tipo de dato ROWID

Representa una dirección de la base de datos, ocupada por una única fila. El ROWID de una fila es un identificador único para una fila dentro de una base de datos. No hay dos filas con el mismo ROWID. Este tipo de dato sirve para guardar punteros a filas concretas. El ROWID se compone de:
-Número de datafile donde se almacena la fila (se pueden ver en DBA_DATA_FILES) -Dirección del bloque donde está la fila -Posición dentro del bloque
Siempre que queramos obtener una fila de la firma más rápida posible, debemos hacerlo a través de su ROWID. Un uso típico suele ser obtener un listado de ROWIDs con un SELECT, y después acceder a cada una de las filas directamente con la condición del ROWID. ""

 

 

Secuencias

CONCEPTO

Mediante las secuencias, Oracle puede proporcionar una lista consecutiva de números unívocos que sirve para simplificar las tareas de programación. La primera vez que una consulta llama a una secuencia, se devuelve un valor predeterminado. En las sucesivas consultas se obtendrá un valor incrementado según el tipo de incremento especificado. Las secuencias pueden ser útiles, por ejemplo, para simular el tipo de datos AUTOINCREMENTO de Paradox, Access y MySQL.

¿Cómo crear una secuencia mediante SQL?

Para crear una secuencia en Oracle mediante SQL utilizaremos el comando create sequence con la siguiente sintaxis:

CREATE SEQUENCE nombre_secuencia
INCREMENT BY numero_incremento
START WITH numero_por_el_que_empezara
MAXVALUE valor_maximo | NOMAXVALUE 
MINVALUE valor_minimo | NOMINVALUE
CYCLE | NOCYCLE
ORDER | NOORDER

Por ejemplo, si queremos crear una secuencia que empiece en 100 y se incremente de uno en uno utilizaremos la siguiente consulta SQL:

CREATE SEQUENCE incremento_id_cliente
INCREMENT BY 1
START WITH 100

Para utilizar la secuencia, en primer lugar, crearemos una tabla de prueba (para insertar un registro y comprobar que la secuencia anterior funciona correctamente):

create table clientes (
codigo number not null primary key, 
nombre varchar2(100) unique not null, 
cif varchar2(15) unique, 
fechaalta date)

Para utilizar la secuencia creada en una inserción de fila:

insert into clientes values (
incremento_id_cliente.NextVal, 
‘AjpdSoft’, 
‘11225522F’, 
sysdate)

Realizamos otra inserción para comprobar que el incremento es de 1:

insert into clientes values (
incremento_id_cliente.NextVal, 
‘Otro cliente’, 
‘00000G’, 
sysdate)

Como se puede observar en el ejemplo anterior, para obtener el siguiente valor de la secuencia almacenada se utiliza el comando:nombre_secuencia.NextVal.

Para comprobar que la secuencia ha funcionado en los inserts anteriores hacemos un SELECT a la tabla "clientes":

select * from clientes

El resultado de este SELECT debe ser de dos registro con "codigo" 100 y 101:

AjpdSoft Administración BD

Ejemplo de creación de una secuencia cíclica (cuando llegue al valor máximo empezará por el valor inicial)

CREATE SEQUENCE incremento_ciclico
INCREMENT BY 1
START WITH 10
MAXVALUE 30 
CYCLE

Creamos una tabla para las pruebas:

create table prueba_ciclo (
codigo number not null primary key, 
ciclo number not null, 
fechaalta date)

Ahora realizamos la inserción de más de 20 filas para comprobar que la secuencia cíclica funciona:

insert into prueba_ciclo values (
incremento_id_cliente.NextVal,
 
incremento_ciclico.NextVal
, 
sysdate)

Como se puede observar en el ejemplo anterior hemos utilzados dos secuencias "incremento_id_cliente" y "incremento_ciclico".

Para comprobar que el ciclo funciona realizamos un SELECT sobre la tabla "prueba_ciclo":

select * from prueba_ciclo

AjpdSoft Administración BD

Crear una secuencia decreciente

Para crear una secuencia decremental el parámetro INCREMENT BY tendrá valor -1 y el parámetro START WITH coincidirá con el parámetro MAXVALUE:

CREATE SEQUENCE secuencia_decremental 
INCREMENT BY -1 
START WITH 100 MAXVALUE 100

Para hacer la prueba crearemos la tabla "prueba_decremental":

create table prueba_decremental (numero number, fecha date)

Ahora insertaremos unas cuantas filas para comprobar que la secuencia funciona correctamente:

insert into prueba_decremental values (secuencia_decremental.NextVal, sysdate)

Haremos un SELECT para comprobar que la secuencia es decremental:

select * from prueba_decremental

AjpdSoft Administración BD


Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s