miércoles, 18 de enero de 2012

Tablas - Modificación de Tablas

CAMBIARLE DE NOMBRE
Continuando con nuestro tema de las tablas, para poder cambiarle el nombre a una tabla utilizaremos el comando RENAME,  tomen en cuenta que este comando permite cambiar el nombre de cualquier objeto de la BD. La sintaxis es la siguiente:

rename NombreViejo to NombreNuevo

Por ejemplo creamos la tabla alumno



Luego la re-nombramos y ahora se llamara estudiante


BORRAR EL CONTENIDO DE LAS TABLAS
Para esto vamos a utilizar el comando TRUNCATE TABLE luego escribimos el nombre de la tabla, esto hace que se elimine únicamente todo el contenido de la tabla, pero la tabla seguirá existiendo pero quedará vacía, tomar en cuenta que para esto no ponemos arrepentirnos y decir "Voy a revertir lo que hice usando ROLLBACK" porque no se puede anular. Como ejemplo veamos la siguiente instrucción, 
truncate table alumno; como pueden ver esta nos devuelve un error, porque si ustedes recuerdan la tabla alumno ya no existe porque le cambiamos el nombre y ahora se llama estudiante.


Como pueden ver ahora si utilizamos el comando truncate table estudiante; ahora si todo funciona correctamente, porque esta tabla si existe y con esto hemos eliminado todo el contenido la tabla en mención



MODIFICANDO TABLAS

Para esto podemos utilizar el comando ALTER TABLE ya que este comando permite hacer cambios en la estructura de las tablas, voy a tomar como ejemplo la tabla ya creada en este caso les recuerdo que ahora la tabla se llama estudiante.


AÑADIENDO COLUMNAS
Para esto vamos a utilizar el comando ADD la sintaxis para hacer esto es la siguiente:

alter table NombreTabla add 
     (
     NombreColumna      TipoDato,
     NombreColumaSig   TipoDato,
     ...
     );
En este ejemplo preciso he agregado dos columnas mas a mi tabla llamada estudiante.

BORRAR COLUMNAS
Para esto vamos a utilizar el comando DROP,  tomando en cuenta de que esto elimina la columna que se indique de manera irreversible y obviamente incluyendo los datos que la columna contenía. La sintaxis para hacer esto es la siguiente:

alter table NombreTabla drop
     (
     NombreColumna
     );
Adicional a esto, cuando una tabla ya solo tiene una solo columna y la queremos eliminar, no lo vamos a poder hacer de esta forma, para este caso especial vamos a utilizar la instrucción DROP TABLE. En este ejemplo preciso he borrado la columna edad de la tabla estudiante.




MODIFICAR COLUMNAS
Para esto vamos a utilizar el comando MODIFY,  esto permite cambiar el tipo de datos y las propiedades de una determinada columna. La sintaxis para hacer esto es la siguiente:

alter table NombreTabla modify
     (
     NombreColumna   NuevoTipo(Propiedades),
              NombreColumna   NuevoTipo(Propiedades)
     );
Los cambios que se permiten realizar, son:

  • El poder modificar el tamaño de un campo
  • Solo se puede modificar el tamaño de un campo, cuando toda la columna no tenga ningún registro.
  • Se puede pasar de char a varchar2 pero si no se modifica el tamaño del campo

Bueno primero vamos a ver como esta nuestra tabla actualmente y observen bien los tipos de datos de los campos nombre y apellido.



Ahora utilizando el comando modify para modificar la estructura de nuestra tabla.


He modificado el tipo de dato al campo nombre y le he cambiado el tamaño al campo apellido. revisemos de nuevo la tabla estudiante con el comando describe.  Y como pueden darse cuenta la estructura de la tabla ha cambiado.

COMENTARIOS A LA TABLAS
Se le puede añadir comentarios a las tablas, esto con la finalidad de documentar el contenido de cada una de las tablas con un texto descriptivo sobre la misma, 

comment on table
NombreTabla ó NombreTabla.NombreColuma
     is 'Comentario Respectivo'
;

Para poder mostrar los comentarios que tienen las tablas, podemos usar las siguientes instrucciones:

  • Si queremos ver los comentarios de las tablas del usuario actual USER_TAB_COMMENTS
  • Si queremos ver los comentarios de las columnas del usuario actual USER_COL_COMMENTS
  • Si queremos ver los comentarios de las tablas de todos los usuarios ALL_TAB_COMMENTS para esto solo tienen acceso los Administradores.
  • Si queremos ver los comentarios de las tablas de todos los usuarios ALL_COL_COMMENTS para esto solo tienen acceso los Administradores.

martes, 17 de enero de 2012

Tipos de Datos

Bueno continuando con nuestro tema hoy les explicaré sobre los tipos de datos que podemos utilizar en Oracle al momento de crear nuestros objetos, 

TIPO TEXTO
  • VARCHAR2(n) para textos con una longitud variable con un máximo de 4000 caracteres.
  • CHAR(n) para textos de longitud fija con un máximo de 2000 caracteres.
Dentro de los paréntesis se debe de indicar el tamaño que va a tener el tipo de dato, en el caso de VARCHAR2 es obligatorio, en el caso del tipo CHAR este es opcional y en caso de no escribirlo toma como valor 1. por ejemplo:

  • Nombre      varchar2(25)
  • Sexo           char

En este caso estoy declarando un campo llamado NOMBRE de tipo texto que me va a permitir escribir como máximo 25 caracteres. y un campo llamado SEXO que me permite ingresar un caracter.

En el caso de crear los campos y los tipos de datos es recomendable dejar suficiente espacio para los valores, esto sin exagerar, específicamente el tipo de dato varchar2 es muy flexible porque este no malgasta el espacio en la BD, ya que si el texto es mas pequeño que el tamaño indicado el resto del espacio se ocupa.

Explicado este con un ejemplo sencillo es lo siguiente, cuando tenemos 5 buses con espacio para 25 pasajeros en cada uno.

Entonces si los buses fueran de tipo char y a cada bus solo abordaran 5 pasajeros, cada bus partiría hacia su destino con 20 asientos vacíos, que desperdicio de espacio verdad. 

En cambio si los buses fueran de tipo varchar, ingresan los primeros 5 pasajeros, y queda 20 asientos libres Oracle al ver el espacio disponible no utiliza mas buses sino optimiza el espacio disponible que queda en el primer bus y de esta manera un solo bus partiría con los 25 pasajeros hacia su destino. 

TIPO NUMERO
Se utiliza, el tipo NUMBER ya que este es un tipo versátil, porque permite representar a todo tipo de números y toma encuenta todos los numeros que esten dentro de este rango:

 10^-130   y 999999999999 * 10^128

Los números decimales, se declaran con el comando NUMBER(p,s) la "P" indica la cantidad de dígitos en total que puede tener y la "S" la cantidad de decimales que va a tener el número, por ejemplo: number(4,2) este indica que acepta un numero que tenga un máximo de 4 dígitos y que el máximo de dígitos en los decimales es de 2, se podría decir que acepta un número como este: 98.43  tiene un total de 4 dígitos como máximo y después del punto solo hay dos decimales.

Como información adicional Oracle toma en cuenta el punto como el separador de los decimales. y para números enteros utilizaremos NUMBER(P) donde "P" es la cantidad de dígitos máximo que acepta y no se indica la cantidad de decimales. 

A continuación les pongo unos ejemplos de como se almacena el número que escribamos según el tipo de comando que utilicemos, veamos.

Formato
No. Escrito por el usuario
Se almacena como
number
345255.345
345255.345
number(9)
345255.345
345255
number(9,2)
345255.345
345255.35
number(7)
345255.345
Da error
number(7,-2)
345255.345
345300
number(7,2)
345255.345
Da error

Bueno, por el momento dejaré el tema acá, luego seguiré explicando los demás tipos de datos.


FECHAS Y HORAS


Para esto podemos utilizar el comando DATE,  ya que este es el que permite almacenar las fechas incluidas las  horas según el formato que utilicemos, por ejemplo si queremos almacenar la fecha 31/12/2011 utilizaríamos el siguiente formato DD/MM/YYYY estos separados con una diagonal o con guiones.Otro ejemplo si queremos guardar la hora 07:35:45 utlizamos el formato HH:MI:SS separados por los dos puntos.

Si en su momento queremos almacenar la fecha actual, utilizaremos el comando SYSDATE ya sea al realizar una consulta o al hacer inserciones en la BD.

lunes, 16 de enero de 2012

Tablas - Describe, Insert, Select, Drop

Continuando con nuestro tema de Base de Datos de Oracle, lo ultimo que comenté acá en mi blog era la forma de crear una tabla. ahora veremos otras cosas que podemos hacer con las tablas.

DESCRIBE
Este comando permite obtener la estructura de una tabla, por ejemplo: 

Primero creamos una tabla:

Luego al utilizar el comando describe podemos ver la estructura de esta tabla:

INSERT
Este comando permite añadir datos a las tablas, la sintaxis básica del comando INSERT es la siguiente:

insert into tabla
     (columa1, columna2, columna3, ...)
     values
     (valor1, valor2, valor3, ...)
     ;
Luego de haber indicado el nombre de la tabla, después del comando values se especifican los valores del nuevo registro, estos valores deben de corresponder al orden de las columnas, por ejemplo:


En este caso podemos ver que el valor para código es  0001 el cual no va dentro de comillas porque es de timo numero y Juan Pérez si aparece dentro de comillas, esto porque Juan Pérez es un String, y por tal motivo debe de ir dentro de comillas.

CONSULTAR TABLAS DEL USUARIO (USER_TABLES)
Dentro del diccionario de datos existe una entrada que nos permite poder consultar las tablas de los usuarios, los dueños de los objetos, este comando es USER_TABLES, de manera que si utilizamos el la siguiente instrucción o query select * from user_tables  vamos a obtener una vista de las tablas del usuario actual, por ejemplo:

Como podemos ver hay diferentes columnas que muestran información sobre las tablas del usuario, en este caso la columna TABLE_NAME muestra el nombre de la tabla que creamos hace un momento, y el motivo por el cual en este momento solo aparece una es porque para este usuario solo he creado un objeto/tabla.

BORRADO DE TABLAS (DROP)
Para esto se utiliza el comando DROP TABLE seguida del nombre de la tabla que queremos eliminar, al utilizar esta instrucción debemos de tener en cuenta lo siguiente: 
  • Toda la data de la Tabla desaparece
  • Cualquier vista y sinónimo, seguirá existiendo pero por obvias razones estas ya no van a funcionar así que es conveniente eliminarlas, 
  • Esta instrucción solo la pueden correr los propietarios de los objetos, en este caso la tabla, solo el propietario de la misma puede correr este comando sobre el nombre de su tabla. O si de cierta manera se tiene el privilegio de DROP ANY TABLE

Mucho ojo con esto, ya que el borrado de la tabla es irreversible y al momento de ejecutar la instrucción, no hay ninguna ventana que nos pregunte si deseamos confirmar la operación, de tal manera les recomiendo que tengan mucho cuidado al ejecutar esta instrucción.

Vamos con el ejemplo:

Como podemos ver, nuestro objeto tabla ya ha sido borrada.

domingo, 15 de enero de 2012

Tablas - Creación de Tablas

Creación de Tablas
Al momento de querer crear nuestra tabla dentro de nuestro esquema en Oracle, los nombres que le podemos colocar a nuestras tablas deben de cumplir algunas reglas, entre ellas las siguientes:

  • Deben de comenzar siempre por una letra. 
  • Se pueden usar letras del alfabeto inglés, números y el signo de subrayado.
  • El nombre de la tabla no debe de tener mas de 30 caracteres.
  • No pueden existir dos tablas con el mismo nombre para el miso usuario/esquema.
  • No debe coincidir con el nombre de ninguna palabra reservada de Word.

Crear Tablas (CREATE)
Para poder crear una tabla vamos a utilizar el comando CREATE, esta se almacena por defecto en el Tablespace del usuario que crea la tabla, la sintaxis para crear una tabla es la siguiente:

Como información adicional, al momento de crear tablas en la BD, existen dos puntos de vista, escribir los nombres de las tablas en Singular o en Plural, En lo personal lo hago en singular, esto porque me permite abstraer de mejor manera la información que se maneja en la BD. La forma en como ustedes lo hagan se los dejo de tarea. www.google.com

create table NombreTabla
     (
      NombreColumna1        TipoColuma1
      );


Por ejemplo:


create table alumno
     (
      Codigo      number(4) primary key,
      Nombre    varchar2(50)
      );

Con esto acabo de crear una Tabla llamada Alumno, que tiene dos campos, un campo llamado Código de tipo número con un máximo de 4 dígitos siendo este la Clave Primaria y un campo llamado Nombre de tipo Caracter con un máximo de 50 Caracteres.

Mas adelante les ampliare mas el tema acerca del Tipo de Datos que se pueden usar en Oracle y sobre las restricciones que se pueden aplicarle a las tablas.



viernes, 13 de enero de 2012

Esquemas de Usuarios y Objetos

Retomando el tema de Base de Datos voy a continuar con la siguiente información.

Esquemas de usuarios y objetos:

Cada usuario de la base de datos posee algo que se llama ESQUEMA, este tiene el mismo nombre del usuario y sirve para almacenar los objetos del esquema, es decir los objetos del usuario. Cuando me refiero a objetos es por ejemplo, una Tabla, una Vista, una Secuencia, un Disparador, estos son objetos que pueden pertenecer a un usuario. 

Por ejemplo: 

El usuario Salvarado tiene su propio esquema, esto quiere decir que Salvarado puede tener su propias tablas, secuencias, disparadores, vistas, etc.

el usuario Jperez tiene su propio esquema, esto quiere decir que Jperez puede tener su propias tablas, secuencias, disparadores, vistas, etc.

Salvarado es el único dueño de sus propios objetos y Jperez no puede tener acceso a los objetos de Salvarado, a menos de que Salvarado cree los permisos necesarios de acceso para que otros usuarios puedan tener acceso sobre sus objetos.

Como mencioné los objetos de los esquemas, pueden ser Tablas, Vistas, Secuencias, Índices, etc, estos pueden ser creados y manipulados por los usuarios, según el tipo de privilegio que se tenga, si se tienen privilegios de solo lectura obviamente no puedo crear objetos, en cambio si tengo privilegios de lectura y escritura si puedo crear y manipular los objetos.

En un principio solo el administrados y los usuarios propietarios, pueden acceder a sus propios objetos y como he mencionado, salvo que se asignen los privilegios necesarios para que otros usuarios pueden tener accesos a los objetos de otros.