Oracle 1
Oracle 1
Oracle 1
ndice de contenido
2 - Crear tablas (create table - describe - all_tables - drop table).........................................................2
3 - Ingresar registros (insert into- select)..............................................................................................7
4 - Tipos de datos................................................................................................................................10
5 - Recuperar algunos campos (select)...............................................................................................14
6 - Recuperar algunos registros (where).............................................................................................18
7 - Operadores relacionales................................................................................................................22
8 - Borrar registros (delete)................................................................................................................26
9 - Actualizar registros (update).........................................................................................................29
10 - Comentarios................................................................................................................................33
11 - Valores nulos (null).....................................................................................................................34
11 - Valores nulos (null).....................................................................................................................36
12 - Operadores relacionales (is null).................................................................................................40
13 - Clave primaria (primary key)......................................................................................................44
14 - Vaciar la tabla (truncate table).....................................................................................................49
15 - Tipos de datos alfanumricos......................................................................................................51
16 - Tipos de datos numricos............................................................................................................55
17 - Ingresar algunos campos.............................................................................................................59
18 - Valores por defecto (default).......................................................................................................61
19 - Operadores aritmticos y de concatenacin (columnas calculadas)...........................................65
20 - Alias (encabezados de columnas)................................................................................................68
21 - Funciones string..........................................................................................................................71
22 - Funciones matemticas...............................................................................................................75
23 - Funciones de fechas y horas........................................................................................................78
24 - Ordenar registros (order by)........................................................................................................81
25 - Operadores lgicos (and - or - not).............................................................................................84
1 de 89
Aparece una tabla que nos muestra en cada fila, los datos de una tabla especfica; en la columna
"TABLE_NAME" aparece el nombre de cada tabla existente.
Al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos almacenarn
cada uno de ellos, es decir, su estructura.
La sintaxis bsica y general para crear una tabla es la siguiente:
create table NOMBRETABLA(
NOMBRECAMPO1 TIPODEDATO,
...
NOMBRECAMPON TIPODEDATO
);
La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a ella.
Creamos una tabla llamada "usuarios" y entre parntesis definimos los campos y sus tipos:
create table usuarios(
nombre varchar2(30),
clave varchar2(10)
);
Cada campo con su tipo debe separarse con comas de los siguientes, excepto el ltimo.
Cuando se crea una tabla debemos indicar su nombre y definir al menos un campo con su tipo de
dato. En esta tabla "usuarios" definimos 2 campos:
- nombre: que contendr una cadena de caracteres de 30 caracteres de longitud, que almacenar el
nombre de usuario y
2 de 89
- clave: otra cadena de caracteres de 10 de longitud, que guardar la clave de cada usuario.
Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Para nombres de tablas, se puede utilizar cualquier caracter permitido para nombres de directorios,
el primero debe ser un caracter alfabtico y no puede contener espacios. La longitud mxima es de
30 caracteres.
Si intentamos crear una tabla con un nombre ya existente (existe otra tabla con ese nombre),
mostrar un mensaje indicando que a tal nombre ya lo est utilizando otro objeto y la sentencia no
se ejecutar.
Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la tabla:
describe usuarios;
Esta es la estructura de la tabla "usuarios"; nos muestra cada campo, su tipo y longitud y otros
valores que no analizaremos por el momento.
Para eliminar una tabla usamos "drop table" junto al nombre de la tabla a eliminar:
drop table NOMBRETABLA;
Si intentamos eliminar una tabla que no existe, aparece un mensaje de error indicando tal situacin
y la sentencia no se ejecuta.
Problema:
Para probar todos los ejercicios resueltos y propuestos debemos ingresar al sqldeveloper.exe y luego
en el entorno crear una nueva conexin:
1. Elegimos File -> New y seleccionamos "New Connection" y presionamos el botn
"Aceptar".
2. Ingresamos los campos Connection Name (por ejemplo ingresamos "prueba"), en el campo
Username ingresamos el usuario SYSTEM y por ltimo en el campo Password ingresamos
la clave que creamos al instalar Oracle.
3. Luego en la ventana que aparece el mansaje "Enter SQL Statement" debemos tipear los
comandos SQL y mediante el primer botn "triangulo verde" ejecutaremos el comando SQL
donde se encuentra el cursos (tambin podemos ejecutar todos los comando SQL mediante
el segundo botn.
Veamos las tablas existentes:
select *from all_tables;
Aparece una tabla que nos muestra todas las tablas; la columna "TABLE_NAME" contiene el
3 de 89
Aparece un mensaje que indica que la sentencia "create table" ha sido procesada.
Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Podemos verificar que se ha creado:
select *from all_tables;
Nos informa que la tabla "usuarios" tiene 2 campos, el campo "nombre" de tipo "varchar2" de 30
caracteres de longitud y el campo "clave", de tipo "varchar2" de 10 caracteres de longitud. La
columna "Null" aparece vaca y la explicaremos ms adelante.
Intentemos crear una tabla con el mismo nombre, mostrar un mensaje indicando que ya hay un
objeto llamado "usuarios" y la sentencia no se ejecutar:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Eliminemos la tabla:
drop table usuarios;
Verifiquemos si se ha eliminado:
select *from all_tables;
4 de 89
aparece un mensaje de error indicando que usamos un caracter invlido ("*") para el nombre de la
tabla.
3- Cree una tabla llamada "agenda", debe tener los siguientes campos: apellido, varchar2(30);
nombre, varchar2(20); domicilio, varchar2 (30) y telefono, varchar2(11)
Un mensaje indica que la tabla ha sido creada exitosamente.
4- Intente crearla nuevamente.
Aparece mensaje de error indicando que el nombre ya lo tiene otro objeto.
5- Visualice las tablas existentes (all_tables)
La tabla "agenda" aparece en la lista.
6- Visualice la estructura de la tabla "agenda" (describe)
Aparece la siguiente tabla:
Name
Null
Type
----------------------APELLIDO
VARCHAR2(30)
NOMBRE
VARCHAR2(20)
DOMICILIO
VARCHAR2(30)
TELEFONO
VARCHAR2(11)
Segundo problema:
Necesita almacenar informacin referente a los libros de su biblioteca personal. Los datos que
guardar sern: ttulo del libro, nombre del autor y nombre de la editorial.
1- Elimine la tabla "libros"
Si no existe, un mensaje indica tal situacin.
2- Verifique que la tabla "libros" no existe (all_tables)
No aparece en la lista.
3- Cree una tabla llamada "libros". Debe definirse con los siguientes campos: titulo, varchar2(20);
autor, varchar2(30) y editorial, varchar2(15)
4- Intente crearla nuevamente:
Aparece mensaje de error indicando que existe un objeto con el nombre "libros".
5 de 89
6 de 89
Usamos "insert into", luego el nombre de la tabla, detallamos los nombres de los campos entre
parntesis y separados por comas y luego de la clusula "values" colocamos los valores para cada
campo, tambin entre parntesis y separados por comas.
En el siguiente ejemplo se agrega un registro a la tabla "usuarios", en el campo "nombre" se
almacenar "Mariano" y en el campo "clave" se guardar "payaso":
insert into usuarios (nombre, clave)
values ('Mariano','payaso');
El comando "select" recupera los registros de una tabla. Con el asterisco indicamos que muestre
todos los campos de la tabla "usuarios".
Aparece la tabla, sus campos y registros ingresados; si no tiene registros, apareceran solamente los
campos y la tabla vaca).
Es importante ingresar los valores en el mismo orden en que se nombran los campos: En el
siguiente ejemplo se lista primero el campo "clave" y luego el campo "nombre" por eso, los valores
tambin se colocan en ese orden:
insert into usuarios (clave, nombre)
values ('River','Juan');
Si ingresamos los datos en un orden distinto al orden en que se nombraron los campos, no aparece
un mensaje de error y los datos se guardan de modo incorrecto.
En el siguiente ejemplo se colocan los valores en distinto orden en que se nombran los campos, el
valor de la clave (la cadena "Boca") se guardar en el campo "nombre" y el valor del nombre (la
cadena "Luis") en el campo "clave":
insert into usuarios (nombre,clave)
values ('Boca','Luis');
7 de 89
Problema:
Vemos si la tabla "usuarios" existe:
select *from all_tables;
Si existe la eliminamos:
drop table usuarios;
Creamos una nueva tabla denominada "usuarios" con los siguientes campos:
create table usuarios(
nombre varchar2(30),
clave varchar2(10)
);
No tiene, la tabla aparece vaca, solamente vemos las columnas que muestran los nombres de sus
campos.
Agregamos un registro a la tabla:
insert into usuarios (nombre, clave)
values ('Mariano','payaso');
Ingresamos los datos en un orden distinto al orden en que se nombran los campos, no aparece un
mensaje de error y los datos se guardan de modo incorrecto:
insert into usuarios (nombre,clave)
values ('Boca','Luis');
La tabla tiene 3 registros. Note que la clave "Boca" se guard en el campo "nombre" y el nombre de
usuario "Luis" en el campo "clave".
Primer problema:
Trabaje con la tabla "agenda" que almacena informacin de sus amigos.
1- Elimine la tabla "agenda"
2- Cree una tabla llamada "agenda". Debe tener los siguientes campos: apellido (cadena de 30),
nombre (cadena de 20), domicilio (cadena de 30) y telefono (cadena de 11)
3- Visualice las tablas existentes para verificar la creacin de "agenda" (all_tables)
4- Visualice la estructura de la tabla "agenda" (describe)
5- Ingrese los siguientes registros:
insert into agenda (apellido, nombre, domicilio, telefono)
values ('Moreno','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre, domicilio, telefono)
values ('Torres','Juan','Avellaneda 135','4458787');
9 de 89
10 de 89
4 - Tipos de datos
Ya explicamos que al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de
datos almacenar cada uno de ellos, es decir, su estructura.
El tipo de dato especifica el tipo de informacin que puede guardar un campo: caracteres, nmeros,
etc.
Estos son algunos tipos de datos bsicos de Oracle (posteriormente veremos otros y con ms
detalle):
- varchar2: se emplea para almacenar cadenas de caracteres. Una cadena es una secuencia de
caracteres. Se coloca entre comillas simples; ejemplo: 'Hola', 'Juan Perez', 'Colon 123'. Este
tipo de dato definen una cadena de longitud variable en la cual determinamos el mximo de
caracteres entre parntesis. Puede guardar hasta xxx caracteres. Por ejemplo, para almacenar
cadenas de hasta 30 caracteres, definimos un campo de tipo varchar2 (30), es decir, entre
parntesis, junto al nombre del campo colocamos la longitud.
Si intentamos almacenar una cadena de caracteres de mayor longitud que la definida, la
cadena no se carga, aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo varchar(10) e intentamos almacenar en l la
cadena 'Buenas tardes', aparece un mensaje indicando que el valor es demasiado grande para
la columna.
- number(p,s): se usa para guardar valores numricos con decimales, de 1.0 x10-120 a 9.9...
(38 posiciones). Definimos campos de este tipo cuando queremos almacenar valores
numricos con los cuales luego realizaremos operaciones matemticas, por ejemplo,
cantidades, precios, etc.
Puede contener nmeros enteros o decimales, positivos o negativos. El parmetro "p" indica
la precisin, es decir, el nmero de dgitos en total (contando los decimales) que contendr el
nmero como mximo. El parmetro "s" especifica la escala, es decir, el mximo de dgitos
decimales. Por ejemplo, un campo definido "number(5,2)" puede contener cualquier nmero
entre 0.00 y 999.99 (positivo o negativo).
Para especificar nmero enteros, podemos omitir el parmetro "s" o colocar el valor 0 como
parmetro "s". Se utiliza como separador el punto (.).
Si intentamos almacenar un valor mayor fuera del rango permitido al definirlo, tal valor no
se carga, aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo number(4,2) e intentamos guardar el valor
123.45, aparece un mensaje indicando que el valor es demasiado grande para la columna. Si
ingresamos un valor con ms decimales que los definidos, el valor se carga pero con la
cantidad de decimales permitidos, los dgitos sobrantes se omiten.
Antes de crear una tabla debemos pensar en sus campos y optar por el tipo de dato adecuado para
cada uno de ellos.
Por ejemplo, si en un campo almacenaremos nmeros telefnicos o un nmeros de documento,
usamos "varchar2", no "number" porque si bien son dgitos, con ellos no realizamos operaciones
matemticas. Si en un campo guardaremos apellidos, y suponemos que ningn apellido superar los
20 caracteres, definimos el campo "varchar2(20)". Si en un campo almacenaremos precios con dos
11 de 89
decimales que no superarn los 999.99 pesos definimos un campo de tipo "number(5,2)", es decir, 5
dgitos en total, con 2 decimales. Si en un campo almacenaremos valores enteros de no ms de 3
dgitos, definimos un campo de tipo "number(3,0)".
Problema:
Eliminamos la tabla "libros":
drop table libros;
Vamos a crear una tabla llamada "libros" para almacenar informacin de los libros de una librera.
Necesitamos los siguientes campos:
-titulo: cadena de caracteres de 20 de longitud,
-autor: cadena de caracteres de 15 de longitud,
-editorial: caracteres de 10 de longitud,
-precio: valor numrico con 2 decimales y que no superar el valor 9999.99 y
-cantidad: valor numrico entero que no superar el valor 999.
Al crear la tabla, entonces, elegimos el tipo de dato ms adecuado para cada campo:
create table libros(
titulo varchar2(20),
autor varchar2(15),
editorial varchar2(10),
precio number(6,2),
cantidad number(3,0)
);
Note que al ingresar valores numricos no se utilizan comillas y para el separador de decimales se
usa el caracter punto (.).
Veamos los registros cargados:
select *from libros;
Veamos lo que sucede si intentamos ingresar para el campo "titulo" una cadena de ms de 20
caracteres:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis
Carroll','Atlantida',10,200);
Oracle omiti el ltimo dgito decimal porque el campo slo admita 2 decimales.
Primer problema:
Un videoclub que alquila pelculas en video almacena la informacin de sus pelculas en una tabla
llamada "peliculas"; para cada pelcula necesita los siguientes datos:
-nombre, cadena de caracteres de 20 de longitud,
-actor, cadena de caracteres de 20 de longitud,
-duracin, valor numrico entero que no supera los 3 dgitos.
-cantidad de copias: valor entero de un slo dgito (no tienen ms de 9 copias
de cada pelcula).
8- Muestre todos los registros para ver cmo se almacen el ltimo registro ingresado.
9- Intente ingresar un nombre de pelcula que supere los 20 caracteres.
Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla "empleados" que guarda los
siguientes datos: nombre, documento, sexo, domicilio, sueldobasico.
1- Elimine la tabla si existe.
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:
create table empleados(
nombre varchar2(20),
documento varchar2(8),
sexo varchar2(1),
domicilio varchar2(30),
sueldobasico number(6,2)
);
La lista de campos luego del "select" selecciona los datos correspondientes a los campos
nombrados. En el ejemplo anterior seleccionamos los campos "titulo" y "autor" de la tabla "libros",
mostrando todos los registros.
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
titulo varchar2(40),
autor varchar2(30),
editorial varchar2(15),
precio number(6,2),
cantidad number(3,0)
);
15 de 89
Recuperamos solamente el ttulo, autor y editorial de todos los libros especificando los nombres de
los campos separados por comas:
select titulo,autor,editorial from libros;
Con la siguiente sentencia seleccionamos los ttulos y precios de todos los libros:
select titulo,precio from libros;
16 de 89
Note que en todos los casos recuperamos TODOS los registros, pero solamente ALGUNOS campos
que especificamos.
Primer problema:
Un videoclub que alquila pelculas en video almacena la informacin de sus pelculas en alquiler en
una tabla llamada "peliculas".
1- Elimine la tabla si existe.
2- Cree la tabla:
create table peliculas(
titulo varchar2(20),
actor varchar2(20),
duracion number(3),
cantidad number(1)
);
17 de 89
18 de 89
Para las condiciones se utilizan operadores relacionales (tema que trataremos ms adelante en
detalle). El signo igual(=) es un operador relacional. Para la siguiente seleccin de registros
especificamos una condicin que solicita los usuarios cuya clave es igual a "River":
select nombre,clave
from usuarios
where clave='River';
Si ningn registro cumple la condicin establecida con el "where", no aparecer ningn registro.
Entonces, con "where" establecemos condiciones para recuperar algunos registros.
Para recuperar algunos campos de algunos registros combinamos en la consulta la lista de campos y
la clusula "where":
select nombre
from usuarios
where clave='River';
En la consulta anterior solicitamos el nombre de todos los usuarios cuya clave sea igual a "River".
Problema:
Trabajamos con la tabla "usuarios" que consta de 2 campos: nombre de usuario y clave.
Eliminamos la tabla si ya existe:
drop table usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar2(30),
clave varchar2(10)
19 de 89
Realizamos una consulta especificando una condicin, queremos ver toda la informacin del
usuario cuyo nombre es "Marcelo":
select *from usuarios
where nombre='Leonardo';
Nos muestra todos los campos del registro en el cual el campo "nombre" es igual a "Marcelo".
Queremos ver el nombre de los usuarios cuya clave es "River":
select nombre from usuarios
where clave='River';
20 de 89
precio)
precio)
precio)
precio)
precio)
5- Seleccione todos los datos de los registros cuyo nombre sea "impresora" (2 registros)
6- Muestre slo el cdigo, descripcin y precio de los teclados (2 registros)
21 de 89
22 de 89
7 - Operadores relacionales
Los operadores son smbolos que permiten realizar operaciones matemticas, concatenar cadenas,
hacer comparaciones.
Oracle reconoce de 4 tipos de operadores:
1)
2)
3)
4)
relacionales (o de comparacin)
aritmticos
de concatenacin
lgicos
igual
distinto
mayor
menor
mayor o igual
menor o igual
Podemos seleccionar los registros cuyo autor sea diferente de "Borges", para ello usamos la
condicin:
select * from libros
where autor<>'Borges';
Podemos comparar valores numricos. Por ejemplo, queremos mostrar los ttulos y precios de los
libros cuyo precio sea mayor a 20 pesos:
select titulo, precio
from libros
where precio>20;
Queremos seleccionar los libros cuyo precio sea menor o igual a 30:
select *from libros
23 de 89
Los operadores relacionales comparan valores del mismo tipo. Se emplean para comprobar si un
campo cumple con una condicin.
No son los nicos, existen otros que veremos mas adelante.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla "libros":
drop table libros;
Seleccionamos los registros cuyo precio supere los 20 pesos, slo el ttulo y precio:
select titulo,precio
from libros
where precio>20;
Note que el valor con el cual comparamos el campo "precio", como es numrico, no se coloca entre
comillas. Los libros cuyo precio es menor a 20 pesos no aparecen en la seleccin.
Recuperamos aquellos libros cuyo precio es menor o igual a 30:
select *from libros
where precio<=30;
Primer problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine "articulos"
24 de 89
Segundo problema:
Un video club que alquila pelculas en video almacena la informacin de sus pelculas en alquiler en
una tabla denominada "peliculas".
1- Elimine la tabla.
drop table peliculas;
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:
create table peliculas(
titulo varchar2(20),
actor varchar2(20),
duracion number(3),
cantidad number(1)
);
25 de 89
26 de 89
Se coloca el comando delete seguido de la palabra clave "from" y el nombre de la tabla de la cual
queremos eliminar los registros. En el siguiente ejemplo se eliminan los registros de la tabla
"usuarios":
delete from usuarios;
Luego, un mensaje indica la cantidad de registros que se han eliminado.
Si no queremos eliminar todos los registros, sino solamente algunos, debemos indicar cul o cules;
para ello utilizamos el comando "delete" junto con la clausula "where" con la cual establecemos la
condicin que deben cumplir los registros a borrar.
Por ejemplo, queremos eliminar aquel registro cuyo nombre de usuario es "Marcelo":
delete from usuarios
where nombre='Marcelo';
Si solicitamos el borrado de un registro que no existe, es decir, ningn registro cumple con la
condicin especificada, aparecer un mensaje indicando que ningn registro fue eliminado, pues no
encontr registros con ese dato.
Tenga en cuenta que si no colocamos una condicin, se eliminan todos los registros de la tabla
especificada.
Problema:
Trabajamos con la tabla "usuarios".
Eliminamos la tabla "usuarios":
drop table usuarios;
27 de 89
Como ningn registro cumple con la condicin especificada (nombre igual a Marcelo), aparecer un
mensaje indicando que ningn registro fue borrado.
Eliminamos todos los registros cuya clave es 'Boca':
delete from usuarios
where clave='Boca';
Aparece un mensaje indicando que 2 registros fueron eliminados, es decir, se eliminaron los 2
registros cuyas claves eran igual a "River".
Eliminemos todos los registros:
delete from usuarios;
No hay registros.
Primer problema:
Trabaje con la tabla "agenda" que registra la informacin referente a sus amigos.
1- Elimine la tabla.
2- Cree la tabla con los siguientes campos: apellido (cadena de 30), nombre (cadena de 20),
domicilio (cadena de 30) y telefono (cadena de 11):
create table agenda(
apellido varchar2(30),
nombre varchar2(20),
domicilio varchar2(30),
telefono varchar2(11)
);
28 de 89
Segundo problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine "articulos"
2- Cree la tabla, con la siguiente estructura:
create table articulos(
codigo number(4,0),
nombre varchar2(20),
descripcion varchar2(30),
precio number(7,2),
cantidad number(3)
);
5- Elimine los artculos cuyo precio sea mayor o igual a 500 (2 registros)
7- Elimine todas las impresoras (1 registro)
8- Elimine todos los artculos cuyo cdigo sea diferente a 4 (1 registro)
29 de 89
Utilizamos "update" junto al nombre de la tabla y "set" junto con el campo a modificar y su nuevo
valor.
El cambio afectar a todos los registros.
Por ejemplo, en nuestra tabla "usuarios", queremos cambiar los valores de todas las claves, por
"RealMadrid":
update usuarios set clave='RealMadrid';
Podemos modificar algunos registros, para ello debemos establecer condiciones de seleccin con
"where".
Por ejemplo, queremos cambiar el valor correspondiente a la clave de nuestro usuario llamado
"Federicolopez", queremos como nueva clave "Boca", necesitamos una condicin "where" que
afecte solamente a este registro:
update usuarios set clave='Boca'
where nombre='Federicolopez';
Si Oracle no encuentra registros que cumplan con la condicin del "where", un mensaje indica que
ningn registro fue modificado.
Las condiciones no son obligatorias, pero si omitimos la clusula "where", la actualizacin afectar
a todos los registros.
Tambin podemos actualizar varios campos en una sola instruccin:
update usuarios set nombre='Marceloduarte', clave='Marce'
where nombre='Marcelo';
Para ello colocamos "update", el nombre de la tabla, "set" junto al nombre del campo y el nuevo
valor y separado por coma, el otro nombre del campo con su nuevo valor.
Problema:
Trabajamos con la tabla "usuarios".
Eliminamos la tabla:
drop table usuarios;
Creamos la tabla:
create table usuarios(
nombre varchar2(20),
30 de 89
Necesitamos cambiar el valor de la clave del usuario llamado "Federicolopez" por "Boca":
update usuarios set clave='Boca'
where nombre='Federicolopez';
Vimos que si Oracle no encuentra registros que cumplan con la condicin del "where", un mensaje
indica que ningn registro se modifica:
update usuarios set clave='payaso'
where nombre='JuanaJuarez';
Primer problema:
Trabaje con la tabla "agenda" que almacena los datos de sus amigos.
1- Elimine la tabla y crela con la siguiente estructura:
drop table agenda;
create table agenda(
apellido varchar2(30),
nombre varchar2(20),
domicilio varchar2(30),
31 de 89
4- Modifique el registro cuyo nombre sea "Juan" por "Juan Jose" (1 registro actualizado)
5- Actualice los registros cuyo nmero telefnico sea igual a "4545454" por "4445566" (2 registros)
6- Actualice los registros que tengan en el campo "nombre" el valor "Juan" por "Juan Jose" (ningn
registro afectado porque ninguno cumple con la condicin del "where")
Segundo problema:
Trabaje con la tabla "libros" de una librera.
1- Elimine la tabla y crela con los siguientes campos: titulo (cadena de 30 caracteres de longitud),
autor (cadena de 20), editorial (cadena de 15) y precio (entero no mayor a 999.99):
drop table libros;
create table libros (
titulo varchar2(30),
autor varchar2(20),
editorial varchar2(15),
precio number(5,2)
);
33 de 89
10 - Comentarios
Para aclarar algunas instrucciones, en ocasiones, necesitamos agregar comentarios.
Es posible ingresar comentarios en la lnea de comandos, es decir, un texto que no se ejecuta; para
ello se emplean dos guiones (--):
select *from libros;--mostramos los registros de libros
en la lnea anterior, todo lo que est luego de los guiones (hacia la derecha) no se ejecuta.
Para agregar varias lneas de comentarios, se coloca una barra seguida de un asterisco (/*) al
comienzo del bloque de comentario y al finalizarlo, un asterisco seguido de una barra (*/)
select titulo, autor
/*mostramos ttulos y
nombres de los autores*/
from libros;
34 de 89
Para especificar que un campo NO admita valores nulos, debemos colocar "not null" luego de la
definicin del campo.
En el ejemplo anterior, los campos "editorial" y "precio" si admiten valores nulos.
Cuando colocamos "null" estamos diciendo que admite valores nulos (caso del campo "editorial");
por defecto, es decir, si no lo aclaramos, los campos permiten valores nulos (caso del campo
"precio").
Cualquier campo, de cualquier tipo de dato permite ser definido para aceptar o no valores nulos. Un
valor "null" NO es lo mismo que un valor 0 (cero) o una cadena de espacios en blanco (" ").
Si ingresamos los datos de un libro, para el cual an no hemos definido el precio podemos colocar
"null" para mostrar que no tiene precio:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',null);
Note que el valor "null" no es una cadena de caracteres, NO se coloca entre comillas.
Entonces, si un campo acepta valores nulos, podemos ingresar "null" cuando no conocemos el
valor.
Tambin podemos colocar "null" en el campo "editorial" si desconocemos el nombre de la editorial
a la cual pertenece el libro que vamos a ingresar:
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais','Lewis Carroll',null,25);
Una cadena vaca es interpretada por Oracle como valor nulo; por lo tanto, si ingresamos una
35 de 89
Cuando vemos la estructura de una tabla con "describe", en la columna "Null", aparece "NOT
NULL" si el campo no admite valores nulos y no aparece en caso que si los permita.
Para recuperar los registros que contengan el valor "null" en algn campo, no podemos utilizar los
operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los
operadores "is null" (es igual a null) y "is not null" (no es null).
Los valores nulos no se muestran, aparece el campo vaco.
Entonces, para que un campo no permita valores nulos debemos especificarlo luego de definir el
campo, agregando "not null". Por defecto, los campos permiten valores nulos, pero podemos
especificarlo igualmente agregando "null".
36 de 89
Creamos la tabla especificando que los campos "titulo" y "autor" no admitan valores nulos:
create table libros(
titulo varchar2(30) not null,
autor varchar2(30) not null,
editorial varchar2(15) null,
precio number(5,2)
);
Los campos "editorial" y "precio" si permiten valores nulos; el primero, porque lo especificamos
colocando "null" en la definicin del campo, el segundo lo asume por defecto.
Agregamos un registro a la tabla con valor nulo para el campo "precio":
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',null);
Veamos lo que sucede si intentamos ingresar el valor "null" en campos que no lo admiten, como
"titulo":
insert into libros (titulo,autor,editorial,precio)
values(null,'Borges','Siglo XXI',25);
aparece un mensaje indicando que no se puede realizar una insercin "null" y la sentencia no se
ejecuta.
Para ver cules campos admiten valores nulos y cules no, vemos la estructura de la tabla:
describe libros;
nos muestra, en la columna "Null", que los campos "titulo" y "autor" estn definidos "not null", es
decir, no permiten valores nulos, los otros dos campos si los admiten.
Dijimos que la cadena vaca es interpretada como valor "null". Vamos a ingresar un registro con
cadena vaca para el campo "editorial":
insert into libros (titulo,autor,editorial,precio)
values('Uno','Richard Bach','',18.50);
No aparece ningn valor en la columna "editorial" del libro "Uno", almacen "null".
Intentamos ingresar una cadena vaca en el campo "titulo":
insert into libros (titulo,autor,editorial,precio)
values('','Richard Bach','Planeta',22);
';
Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada
"medicamentos".
1- Elimine la tabla y crela con la siguiente estructura:
drop table medicamentos;
38 de 89
Segundo problema:
Trabaje con la tabla que almacena los datos sobre pelculas, llamada "peliculas".
1- Elimine la tabla:
2- Crela con la siguiente estructura:
create table peliculas(
codigo number(4) not null,
titulo varchar2(40) not null,
actor varchar2(20),
duracion number(3)
);
39 de 89
5- Recupere todos los registros para ver cmo Oracle los almacen.
6- Intente ingresar un registro con valor nulo para campos que no lo admiten (aparece un mensaje
de error)
7- Muestre todos los registros.
8- Actualice la pelcula en cuyo campo "duracion" hay 0 por "null" (1 registro)
9- Recupere todos los registros.
40 de 89
Con la primera sentencia veremos los libros cuya editorial almacena el valor "null" (desconocido);
con la segunda, los libros cuya editorial guarda una cadena de 3 espacios en blanco.
Para obtener los registros que no contienen "null", se puede emplear "is not null", esto mostrar los
registros con valores conocidos.
Para ver los libros que NO tienen valor "null" en el campo "precio" tipeamos:
select *from libros where precio is not null;
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla y la creamos:
drop table libros;
create table libros(
codigo number(4) not null,
titulo varchar2(40) not null,
autor varchar2(20),
editorial varchar2(20),
precio number(6,2)
);
41 de 89
Recuperamos los registros en los cuales est almacenado el valor "null" en el campo "editorial":
select *from libros
where editorial is null;
Dijimos que una cadena de espacios NO es igual a una cadena vaca o valor "null". Vamos a
ingresar un registro y en el campo "editorial" guardaremos una cadena de 3 espacios:
insert into libros (codigo,titulo,autor,editorial,precio)
values(9,'Don quijote','Cervantes','
',20);
Con la primera sentencia veremos los libros cuya editorial es igual a "null" (desconocido); con la
segunda, los libros cuya editorial almacena una cadena de espacios.
Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada
"medicamentos".
1- Elimine la tabla y crela con la siguiente estructura:
drop table medicamentos;
create table medicamentos(
codigo number(5) not null,
nombre varchar2(20) not null,
laboratorio varchar2(20),
precio number(5,2),
cantidad number(3,0) not null
);
Segundo problema:
Trabaje con la tabla que almacena los datos sobre pelculas, llamada "peliculas".
1- Elimine la tabla:
drop table peliculas;
43 de 89
3- Visualice la estructura de la tabla. note que el campo "codigo" y "titulo", en la columna "Null"
muestran "NOT NULL".
4- Ingrese los siguientes registros:
insert into peliculas (codigo,titulo,actor,duracion)
values(1,'Mision imposible','Tom Cruise',120);
insert into peliculas (codigo,titulo,actor,duracion)
values(2,'Harry Potter y la piedra filosofal',null,180);
insert into peliculas (codigo,titulo,actor,duracion)
values(3,'Harry Potter y la camara secreta','Daniel R.',null);
insert into peliculas (codigo,titulo,actor,duracion)
values(0,'Mision imposible 2','',150);
insert into peliculas (codigo,titulo,actor,duracion)
values(4,'Titanic','L. Di Caprio',220);
insert into peliculas (codigo,titulo,actor,duracion)
values(5,'Mujer bonita','R. Gere-J. Roberts',0);
5- Recupere todos los registros para ver cmo Oracle los almacen.
6- Intente ingresar un registro con valor nulo para campos que no lo admiten (aparece un mensaje
de error)
7- Muestre los registros con valor nulo en el campo "actor" (2 registros)
8- Actualice los registros que tengan valor de duracin desconocido (nulo) por "120" (1 registro
actualizado)
9- Coloque 'Desconocido' en el campo "actor" en los registros que tengan valor nulo en dicho
campo (2 registros)
10- Muestre todos los registros
11- Muestre todos los registros con valor nulo en el campo "actor" (ninguno)
12- Actualice la pelcula en cuyo campo "duracion" hay 0 por "null" (1 registro)
13- Recupere todos los registros.
14- Borre todos los registros en los cuales haya un valor nulo en "duracion" (1 registro)
15- Verifique que se elimin recuperando todos los registros.
44 de 89
Lo que hacemos agregar, luego de la definicin de cada campo, "primary key" y entre parntesis, el
nombre del campo que ser clave primaria.
En el siguiente ejemplo definimos una clave primaria, para nuestra tabla "usuarios" para
asegurarnos que cada usuario tendr un nombre diferente y nico:
create table usuarios(
nombre varchar2(20),
clave varchar2(10),
primary key(nombre)
);
Una tabla slo puede tener una clave primaria. Cualquier campo (de cualquier tipo) puede ser clave
primaria, debe cumplir como requisito, que sus valores no se repitan ni sean nulos. Por ello, al
definir un campo como clave primaria, automticamente Oracle lo convierte a "not null".
Luego de haber establecido un campo como clave primaria, al ingresar los registros, Oracle controla
que los valores para el campo establecido como clave primaria no estn repetidos en la tabla; si
estuviesen repetidos, muestra un mensaje y la insercin no se realiza. Es decir, si en nuestra tabla
"usuarios" ya existe un usuario con nombre "juanperez" e intentamos ingresar un nuevo usuario con
nombre "juanperez", aparece un mensaje y la instruccin "insert" no se ejecuta.
Igualmente, si realizamos una actualizacin, Oracle controla que los valores para el campo
45 de 89
establecido como clave primaria no estn repetidos en la tabla, si lo estuviese, aparece un mensaje
indicando que se viola la clave primaria y la actualizacin no se realiza.
Podemos ver el campo establecido como clave primaria de una tabla realizando la siguiente
consulta:
select uc.table_name, column_name from user_cons_columns ucc
join user_constraints uc
on ucc.constraint_name=uc.constraint_name
where uc.constraint_type='P' and
uc.table_name='USUARIOS';
Al campo "nombre" no lo definimos "not null", pero al establecerse como clave primaria, Oracle lo
convierte en "not null", veamos que en la columna "NULL" aparece "NOT NULL":
describe usuarios;
Recordemos que cuando un campo es clave primaria, sus valores no se repiten. Intentamos ingresar
un valor de clave primaria existente:
insert into usuarios (nombre, clave)
values ('juanperez','payaso');
Si realizamos alguna actualizacin, Oracle controla que los valores para el campo establecido como
clave primaria no estn repetidos en la tabla. Intentemos actualizar el nombre de un usuario
colocando un nombre existente:
update usuarios set nombre='juanperez'
where nombre='raulgarcia';
indicando que la tabla "usuarios" tiene establecido el campo "nombre" como clave primaria.
Primer problema:
Trabaje con la tabla "libros" de una librera.
1- Elimine la tabla:
drop table libros;
2- Crela con los siguientes campos, estableciendo como clave primaria el campo "codigo":
create table libros(
codigo number(4) not null,
titulo varchar2(40) not null,
autor varchar2(20),
editorial varchar2(15),
primary key (codigo)
);
Segundo problema:
Un instituto de enseanza almacena los datos de sus estudiantes en una tabla llamada "alumnos".
1- Elimine la tabla "alumnos":
drop table alumnos;
2- Cree la tabla con la siguiente estructura intentando establecer 2 campos como clave primaria, el
campo "documento" y "legajo":
create table alumnos(
legajo varchar2(4) not null,
documento varchar2(8),
nombre varchar2(30),
domicilio varchar2(30),
primary key(codigo),
primary key(documento)
);
48 de 89
49 de 89
La sentencia "truncate table" vaca la tabla (elimina todos los registros) y conserva la estructura de
la tabla.
La diferencia con "drop table" es que esta sentencia elimina la tabla, no solamente los registros,
"truncate table" la vaca de registros.
La diferencia con "delete" es la siguiente, al emplear "delete", Oracle guarda una copia de los
registros borrados y son recuperables, con "truncate table" no es posible la recuperacin porque se
libera todo el espacio en disco ocupado por la tabla; por lo tanto, "truncate table" es ms rpido que
"delete" (se nota cuando la cantidad de registros es muy grande).
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
codigo number(4),
titulo varchar2(30),
autor varchar2(20),
editorial varchar2(15),
precio number(5,2)
);
Truncamos la tabla:
truncate table libros;
50 de 89
Eliminamos la tabla:
drop table libros;
51 de 89
tal.
Por ejemplo, si en un campo definido como varchar2(5) ingresamos el valor 12345, lo toma como si
hubisemos tipeado '12345', igualmente, si ingresamos el valor 23.56, lo convierte a '23.56'. Si el
valor numrico, al ser convertido a cadena supera la longitud definida, aparece un mensaje de error
y la sentencia no se ejecuta.
Es importante elegir el tipo de dato adecuado segn el caso.
Para almacenar cadenas que varan en su longitud, es decir, no todos los registros tendrn la misma
longitud en un campo determinado, se emplea "varchar2" en lugar de "char".
Por ejemplo, en campos que guardamos nombres y apellidos, no todos los nombres y apellidos
tienen la misma longitud.
Para almacenar cadenas que no varan en su longitud, es decir, todos los registros tendrn la misma
longitud en un campo determinado, se emplea "char".
Por ejemplo, definimos un campo "codigo" que constar de 5 caracteres, todos los registros tendrn
un cdigo de 5 caracteres, ni ms ni menos.
Para almacenar valores superiores a 4000 caracteres se debe emplear "long".
Problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos datos
de las personas que visitan o compran en su stand para luego enviarle publicidad de sus productos.
Eliminamos la tabla "visitantes":
drop table visitantes;
Los campos "nombre", "domicilio" y "ciudad" almacenarn valores cuya longitud vara, por ello
elegimos el tipo "varchar2" y le damos a cada uno una longitud mxima estimando su tamao. El
campo "sexo" se define de tipo "char", porque necesitamos solamente 1 caracter "f" o "m", que
siempre ser fijo. El campo "telefono" tambin se define como varchar2 porque no todos los
nmeros telefnicos tienen la misma longitud.
Ingresamos un registro:
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Ana Acosta',25,'f','Avellaneda 123','Cordoba','4223344');
Intentamos ingresar una cadena de mayor longitud que la definida en el campo "sexo":
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Betina Bustos',32,'fem','Bulnes 234','Cordoba','4515151');
53 de 89
Ingresamos un nmero telefnico olvidando las comillas, es decir, como un valor numrico:
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Carlos Caseres',43,'m','Colon 345','Cordoba',03514555666);
Primer problema:
Una concesionaria de autos vende autos usados y almacena los datos de los autos en una tabla
llamada "autos".
1- Elimine la tabla "autos"
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo, estableciendo el campo
"patente" como clave primaria:
create table autos(
patente char(6),
marca varchar2(20),
modelo char(4),
precio number(8,2),
primary key (patente)
);
Hemos definido el campo "patente" de tipo "char" y no "varchar2" porque la cadena de caracteres
siempre tendr la misma longitud (6 caracteres). Lo mismo sucede con el campo "modelo", en el
cual almacenaremos el ao, necesitamos 4 caracteres fijos.
3- Ingrese los siguientes registros:
insert into autos (patente,marca,modelo,precio)
values('ABC123','Fiat 128','1970',15000);
insert into autos (patente,marca,modelo,precio)
values('BCD456','Renault 11','1990',40000);
insert into autos (patente,marca,modelo,precio)
values('CDE789','Peugeot 505','1990',80000);
insert into autos (patente,marca,modelo,precio)
values('DEF012','Renault Megane','1998',95000);
54 de 89
Segundo problema:
Una empresa almacena los datos de sus clientes en una tabla llamada "clientes".
1- Elimine la tabla "clientes"
2- Crela eligiendo el tipo de dato ms adecuado para cada campo:
create table clientes(
documento char(8) not null,
apellido varchar2(20),
nombre varchar2(20),
domicilio varchar2(30),
telefono varchar2 (11)
);
3- Analice la definicin de los campos. Se utiliza char(8) para el documento porque siempre
constar de 8 caracteres. Para el nmero telefnico se usar "varchar2" y no un tipo numrico porque
si bien es un nmero, con l no se realizarn operaciones matemticas.
4- Ingrese algunos registros:
insert into clientes (documento,apellido,nombre,domicilio,telefono)
values('22333444','Perez','Juan','Sarmiento 980','4223344');
insert into clientes (documento,apellido,nombre,domicilio,telefono)
values('23444555','Perez','Ana','Colon 234',null);
insert into clientes (documento,apellido,nombre,domicilio,telefono)
values('30444555','Garcia','Luciana','Caseros 634',null);
5- Intente ingresar un registro con ms caracteres que los permitidos para el campo "telefono"
6- Intente ingresar un registro con ms caracteres que los permitidos para el campo "documento"
7- Intente ingresar un registro omitiendo las comillas en el campo "apellido"
8- Seleccione todos los clientes de apellido "Perez" (2 registros)
55 de 89
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;
Note que definimos el campo "codigo" de tipo "number(5)", esto es porque estimamos que no
tendremos ms de 99999 libros, y no colocamos decimales porque necesitamos nmeros 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 superarn los 9999, definimos el campo de tipo
"number(4)", no colocamos decimales porque necesitamos valores enteros.
Analicemos la insercin de datos numricos.
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);
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);
Trunc el valor.
57 de 89
Error.
Primer problema:
Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".
La tabla contiene estos datos:
Nmero de Cuenta
Documento
Nombre
Saldo
______________________________________________________________
1234
25666777
Pedro Perez
500000.60
2234
27888999
Juan Lopez
-250000
3344
27888999
Juan Lopez
4000.50
3346
32111222
Susana Molina
1000
2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar los datos descriptos arriba:
- Nmero de cuenta: entero hasta 9999, no nulo, no puede haber valores repetidos, clave primaria;
- Documento del propietario de la cuenta: cadena de caracteres de 8 de longitud (siempre 8), no
nulo;
- Nombre del propietario de la cuenta: cadena de caracteres de 30 de longitud,
- Saldo de la cuenta: valores que no superan 999999.99
create table cuentas(
numero number(4) not null,
documento char(8),
nombre varchar2(30),
saldo number(8,2),
primary key (numero)
);
58 de 89
Note que hay dos cuentas, con distinto nmero de cuenta, de la misma persona.
4- Seleccione todos los registros cuyo saldo sea mayor a "4000" (2 registros)
5- Muestre el nmero de cuenta y saldo de todas las cuentas cuyo propietario sea "Juan Lopez" (2
registros)
6- Muestre las cuentas con saldo negativo (1 registro)
7- Muestre todas las cuentas cuyo nmero es igual o mayor a "3000" (2 registros)
Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla "empleados" que guarda los
siguientes datos: nombre, documento, sexo, domicilio, sueldobasico.
1- Elimine la tabla:
drop table empleados;
4- Ingrese un valor de "sueldobasico" con ms decimales que los definidos (redondea los decimales
al valor ms cercano 800.89)
5- Intente ingresar un sueldo que supere los 7 dgitos (no lo permite)
6- Muestre todos los empleados cuyo sueldo no supere los 900 pesos
7- Seleccione los nombres de los empleados que tengan hijos (3 registros)
59 de 89
Tambin es posible ingresar valores para algunos campos. Ingresamos valores solamente para los
campos "titulo" y "autor":
insert into libros (titulo, autor)
values ('El aleph','Borges');
Oracle almacenar el valor "null" en el campo "editorial", para el cual no hemos explicitado un
valor.
Al ingresar registros debemos tener en cuenta:
- la lista de campos debe coincidir en cantidad y tipo de valores con la lista de valores luego de
"values". Si se listan ms (o menos) campos que los valores ingresados, aparece un mensaje de error
y la sentencia no se ejecuta.
- si ingresamos valores para todos los campos podemos obviar la lista de campos.
- podemos omitir valores para los campos que permitan valores nulos (se guardar "null"); si
omitimos el valor para un campo "not null", la sentencia no se ejecuta.
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
codigo number(5) not null,
titulo varchar2(40) not null,
autor varchar2(30),
editorial varchar2(15)
);
Si ingresamos valores para todos los campos, podemos omitir la lista de campos:
insert into libros
values (1,'Uno','Richard Bach','Planeta');
Primer problema:
Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".
1- Elimine la tabla "cuentas":
drop table cuentas;
2- Cree la tabla :
create table cuentas(
numero number(10) not null,
documento char(8) not null,
nombre varchar2(30),
saldo number(9,2)
);
3- Ingrese un registro con valores para todos sus campos, omitiendo la lista de campos.
4- Ingrese un registro omitiendo algn campo que admita valores nulos.
5- Verifique que en tal campo se almacen "null"
6- Intente ingresar un registro listando 3 campos y colocando 4 valores. Un mensaje indica que hay
demasiados valores.
7- Intente ingresar un registro listando 3 campos y colocando 2 valores. Un mensaje indica que no
hay suficientes valores.
8- Intente ingresar un registro sin valor para un campo definido "not null".
9- Vea los registros ingresados.
61 de 89
Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad", Oracle
insertar los valores por defecto; en "autor" colocar "Desconocido" y en cantidad "0".
Entonces, si al definir el campo explicitamos un valor mediante la clusula "default", se ser el
valor por defecto.
La clusula "default" debe ir antes de "not null" (si existiese), sino aparece un mensaje de error.
Para ver si los campos de la tabla "libros" tiene definidos valores por defecto y cules son, podemos
realizar la siguiente consulta:
select column_name,nullable,data_default
from user_tab_columns where TABLE_NAME = 'libros';
Muestra una fila por cada campo, en la columna "data_default" aparece el valor por defecto (si lo
tiene), en la columna "nullable" aparece "N" si el campo no est definido "not null" y "Y" si admite
valores "null".
Tambin se puede utilizar "default" para dar el valor por defecto a los campos en sentencias
"insert", por ejemplo:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,default,default,100);
Creamos la tabla estableciendo valores por defecto para los campos "autor" y "cantidad":
create table libros(
titulo varchar2(40) not null,
autor varchar2(30) default 'Desconocido' not null,
editorial varchar2(20),
precio number(5,2),
cantidad number(3) default 0
);
Oracle ingresar el registro con el ttulo, editorial y precio especificados, en "autor" colocar
"Desconocido" y en cantidad "0", vemoslo:
select *from libros;
Si ingresamos un registro sin valor para el campo "precio", que admite valores nulos, se ingresar
"null" en ese campo:
insert into libros (titulo,editorial)
values('Aprenda PHP','Siglo XXI');
Veamos si los campos de la tabla "libros" tiene definidos valores por defecto y cules son:
select column_name,nullable,data_default
from user_tab_columns where TABLE_NAME = 'LIBROS';
Muestra una fila por cada campo, en la columna "data_default" aparece el valor por defecto (si lo
tiene), en la columna "nullable" aparece "N" si el campo no est definido "not null" y "Y" si permite
valores nulos.
Podemos emplear "default" para dar el valor por defecto a algunos campos al ingresar un registro:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,default,default,default);
64 de 89
Todos los campos admiten valores nulos; hay 3 campos con valores predeterminados.
5- Ingrese algunos registros sin especificar valores para algunos campos para ver cmo opera la
clusula "default":
insert into visitantes (domicilio,ciudad,telefono,mail,montocompra)
values ('Colon 123','Cordoba','4334455','juanlopez@hotmail.com',59.80);
insert into visitantes (nombre,edad,sexo,telefono,mail,montocompra)
values ('Marcos Torres',29,'m','4112233','marcostorres@hotmail.com',60);
insert into visitantes (nombre,edad,sexo,domicilio,ciudad)
values ('Susana Molina',43,'f','Bulnes 345','Carlos Paz');
Segundo problema:
Una pequea biblioteca de barrio registra los prstamos de sus libros en una tabla llamada
"prestamos". En ella almacena la siguiente informacin: ttulo del libro, documento de identidad del
socio a quien se le presta el libro, fecha de prstamo, fecha en que tiene que devolver el libro y si el
libro ha sido o no devuelto.
1- Elimine la tabla "prestamos"
2- Cree la tabla:
create table prestamos(
titulo varchar2(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);
65 de 89
19 - Operadores aritmticos y de
concatenacin (columnas calculadas)
Aprendimos que los operadores son smbolos que permiten realizar distintos tipos de operaciones.
Dijimos que Oracle tiene 4 tipos de operadores: 1) relacionales o de comparacin (los vimos), 2)
aritmticos, 3) de concatenacin y 4) lgicos (lo veremos ms adelante).
Los operadores aritmticos permiten realizar clculos con valores numricos.
Son: multiplicacin (*), divisin (/), suma (+) y resta (-).
Es posible obtener salidas en las cuales una columna sea el resultado de un clculo y no un campo
de una tabla.
Si queremos ver los ttulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad
from libros;
Si queremos saber el monto total en dinero de un ttulo podemos multiplicar el precio por la
cantidad por cada ttulo, pero tambin podemos hacer que Oracle realice el clculo y lo incluya en
una columna extra en la salida:
select titulo, precio,cantidad,
precio*cantidad
from libros;
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia
los siguientes clculos:
select titulo,precio,
precio-(precio*0.1)
from libros;
66 de 89
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
codigo number(5),
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
precio number(6,2),
cantidad number(4) default 0,
primary key (codigo)
);
Primer problema:
67 de 89
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine la tabla:
drop table articulos;
2- Cree la tabla:
create table articulos(
codigo number(4),
nombre varchar2(20),
descripcion varchar2(30),
precio number(8,2),
cantidad number(3) default 0,
primary key (codigo)
);
4- El comercio quiere aumentar los precios de todos sus artculos en un 15%. Actualice todos los
precios empleando operadores aritmticos.
5- Vea el resultado.
6- Muestre todos los artculos, concatenando el nombre y la descripcin de cada uno de ellos
separados por coma.
7- Reste a la cantidad de todas las impresoras, el valor 5, empleando el operador aritmtico menos
("-")
8- Recupere todos los datos de las impresoras para verificar que la actualizacin se realiz.
9- Muestre todos los artculos concatenado los campos para que aparezcan de la siguiente manera
"Cod. 101: impresora Epson Stylus C45 $460,92 (15)"
68 de 89
Para reemplazar el nombre de un campo del encabezado por otro, se coloca la palabra clave "as"
seguido del texto del encabezado.
Si el alias consta de una sola cadena las comillas no son necesarias, pero si contiene ms de una
palabra, es necesario colocarla entre comillas dobles:
select titulo,
cantidad as "stock disponible",
precio
from libros;
Creamos la tabla:
create table libros(
titulo varchar2(40),
autor varchar2(30),
editorial varchar2(20),
precio number(5,2),
cantidad number(4)
);
69 de 89
Recuperamos el ttulo, autor, precio, descuento del 10% y precio final con descuento, empleando un
alias para las 2 ltimas columnas:
select titulo,autor,precio,
precio*0.1 as descuento,
precio-(precio*0.1) as "precio final"
from libros;
Primer problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine la tabla:
drop table articulos;
2- Cree la tabla:
create table articulos(
codigo number(4),
nombre varchar2(20),
descripcion varchar2(30),
precio number(8,2),
cantidad number(3) default 0,
primary key (codigo)
);
4- El comercio hace un descuento del 15% en ventas mayoristas. Necesitamos recuperar el cdigo,
nombre, decripcin de todos los artculos con una columna extra que muestre el precio de cada
artculo para la venta mayorista con el siguiente encabezado "precio mayorista"
5- Muestre los precios de todos los artculos, concatenando el nombre y la descripcin con el
encabezado "artculo" (sin emplear "as" ni comillas)
6- Muestre todos los campos de los artculos y un campo extra, con el encabezado "monto total" en
la que calcule el monto total en dinero de cada artculo (precio por cantidad)
7- Muestre la descripcin de todas las impresoras junto al precio con un 20% de recargo con un
encabezado que lo especifique.
71 de 89
21 - Funciones string
Las funciones de manejo de caracteres alfanumricos aceptan argumentos de tipo caracter y
retornan caracteres o valores numricos.
Las siguientes son algunas de las funciones que ofrece Oracle para trabajar con cadenas de
caracteres:
- chr(x): retorna un caracter equivalente al cdigo enviado como argumento "x". Ejemplo:
select chr(65) from dual;-- retorna 'A'.
select chr(100) from dual;-- retorna 'd'.
- initcap(cadena): retorna la cadena enviada como argumento con la primera letra (letra capital) de
cada palabra en mayscula. Ejemplo:
select initcap('buenas tardes alumno') from dual;--retorna 'Buenas Tardes
Alumno'.
72 de 89
- trim(cadena): retorna la cadena con los espacios de la izquierda y derecha eliminados. "Trim"
significa recortar. Ejemplo:
select trim('
oracle
retorna "www.oracle.com'.
- substr(cadena,inicio,longitud): devuelve una parte de la cadena especificada como primer
argumento, empezando desde la posicin especificada por el segundo argumento y de tantos
caracteres de longitud como indica el tercer argumento. Ejemplo:
select substr('www.oracle.com',1,10) from dual;-- 'www.oracle'
select substr('www.oracle.com',5,6) from dual;-- 'oracle'
- translate(): reemplaza cada ocurrencia de una serie de caracteres con otra serie de caracteres. La
diferencia con "replace" es que aquella trabaja con cadenas de caracteres y reemplaza una cadena
completa por otra, en cambio "translate" trabaja con caracteres simples y reemplaza varios. En el
siguiente ejemplo se especifica que se reemplacen todos los caracteres "O" por el caracter "0", todos
los caracteres "S" por el caracter "5" y todos los caracteres "G" por "6":
select translate('JORGE LUIS BORGES','OSG','056') from dual;--'J0R6E LUI5
B0R6E5'
73 de 89
Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo
carcter.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
codigo number(5),
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
precio number(6,2),
cantidad number(3)
);
Mostramos slo los 12 primeros caracteres de los ttulos de los libros y sus autores, empleando la
funcin "substr":
select substr(titulo,1,12) as titulo
from libros;
Mostramos slo los 20 primeros caracteres de los ttulos de los libros y rellenando los espacios
restantes con "*", empleando la funcin "rpad":
select rpad(titulo,20,'*') as titulo
from libros;
Mostramos el ttulo y el precio de todos los libros concatenando el signo "$" a los precios:
select titulo,concat('$ ',precio) as precio
from libros;
Recuperamos el autor de todos los libros reemplazando las letras "abc" por "ABC" respectivamente
(empleando "translate"):
select translate(autor,'abc','ABC') from libros;
Note que los ttulos que no contienen la subcadena "pais" muestran el valor cero.
75 de 89
22 - Funciones matemticas.
Las funciones matemticas realizan operaciones con expresiones numricas y retornan un resultado,
operan con tipos de datos numricos.
Las funciones numricas aceptan parmetros de entrada de tipo numrico y retornan valores
numricos.
Oracle tiene algunas funciones para trabajar con nmeros. Aqu presentamos algunas.
- abs(x): retorna el valor absoluto del argumento "x". Ejemplo:
select abs(-20) from dual;--retorna 20.
La tabla dual es una tabla virtual que existe en todas las Bases de datos Oracle.
- ceil(x): redondea a entero, hacia arriba, el argumento "x". Ejemplo:
select ceil(12.34) from dual;--retorna 13.
- round(n,d): retorna "n" redondeado a "d" decimales; si se omite el segundo argumento, redondea
todos los decimales. Si el segundo argumento es positivo, el nmero de decimales es redondeado
segn "d"; si es negativo, el nmero es redondeado desde la parte entera segn el valor de "d".
Ejemplos:
select round(123.456,2) from dual;-- retorna "123.46", es decir, redondea desde
el segundo decimal.
select round(123.456,1) from dual;-- 123.5, es decir, redondea desde el primer
decimal.
select round(123.456,-1) from dual;-- 120, redondea desde el primer valor
entero (hacia la izquierda).
select round(123.456,-2) from dual;-- 100, redondea desde el segundo valor
entero (hacia la izquierda).
select round(123.456) from dual;-- 123.
76 de 89
- sqrt(x): devuelve la raiz cuadrada del valor enviado como argumento. Ejemplo:
select sqrt(9) from dual;--retorna 3
Oracle dispone de funciones trigonomtricas que retornan radianes, calculan seno, coseno, inversas,
etc.: acos, asin, atan, atan2, cos, cosh, exp, ln, log, sin, sinh, tan, tanh. No las veremos en detalle.
Se pueden emplear las funciones matemticas enviando como argumento el nombre de un campo de
tipo numrico.
Problema:
Una empresa almacena los datos de sus empleados en una tabla denominada "empleados".
Eliminamos la tabla:
drop table empleados;
Creamos la tabla:
create table empleados(
legajo number(5),
documento char(8) not null,
nombre varchar2(30) not null,
domicilio varchar2(30),
sueldo number(6,2),
hijos number(2),
primary key (legajo)
);
Vamos a mostrar los sueldos de los empleados redondeando el valor hacia abajo y luego hacia arriba
(empleamos "floor" y "ceil"):
select floor(sueldo) as "sueldo hacia abajo",
ceil(sueldo) as "sueldo hacia arriba"
from empleados;
Mostramos los nombre de cada empleado, su respectivo sueldo, y el sueldo redondeando el valor a
entero ("round") y truncado a entero ("trunc"):
77 de 89
Note que los valores devueltos segn la funcin empleada, son diferentes.
Mostramos el resultado de "2 elevado a la potencia 5" ("power"):
select power(2,5) from dual;
Devuelve el valor 4.
Calculamos la raz cuadrada de 81:
select sqrt(81) from dual;
Retorna 9.
78 de 89
- months_between(f1,f2): retorna el numero de meses entre las fechas enviadas como argumento.
Ejemplo:
select months_between('19/05/2003','21/06/05') from dual;-- retorna
Retorna 05/09/07
- to_char: convierte una fecha a cadena de caracteres. Ejemplo:
79 de 89
- extract(parte,fecha): retorna la parte (especificada por el primer argumento) de una fecha. Puede
extraer el ao (year), mes (month), da (day), hora (hour), minuto (minute), segundo (second), etc.
Ejemplo:
select extract(month from sysdate) from dual;
Retorna 10/12/07
Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo date.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
edicion date,
precio number(6,2)
);
80 de 89
Muestre la fecha que ser 15 das despus de "24/08/2007" empleando el operador "+":
select to_date('24/08/2007')+15 from dual;
Retorna 08/09/07.
Muestre la fecha que 20 das antes del "12/08/2007" empleando el operador "-":
select to_date('12/08/2007')-20 from dual;
Retorna 23/07/07.
81 de 89
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el ttulo:
select *from libros
order by titulo;
Tambin podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
select *from libros
order by titulo,editorial;
Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido ascendente y
"editorial" en sentido descendente:
select *from libros
order by titulo asc, editorial desc;
Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo inmediatamente
anterior.
Es posible ordenar por un campo que no se lista en la seleccin incluso por columnas calculados.
Se puede emplear "order by" con campos de tipo caracter, numrico y date.
Problema:
Trabajamos con la tabla "libros" de una librera.
82 de 89
Ordenamos los registros por el campo "precio", referenciando el campo por su posicin en la lista
de seleccin:
select titulo,autor,precio
from libros order by 3;
83 de 89
Primer problema:
En una pgina web se guardan los siguientes datos de las visitas: nombre, mail, pais y fecha.
1- Elimine la tabla "visitas" y crela con la siguiente estructura:
drop table visitas;
create table visitas (
nombre varchar2(30) default 'Anonimo',
mail varchar2(50),
pais varchar2(20),
fecha date
);
84 de 89
Los registros recuperados en una sentencia que une dos condiciones con el operador "and", cumplen
con las 2 condiciones.
Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
select *from libros
where autor='Borges' or
editorial='Planeta';
En la sentencia anterior usamos el operador "or"; indicamos que recupere los libros en los cuales el
valor del campo "autor" sea "Borges" y/o el valor del campo "editorial" sea "Planeta", es decir,
seleccionar los registros que cumplan con la primera condicin, con la segunda condicin y con
ambas condiciones.
Los registros recuperados con una sentencia que une dos condiciones con el operador "or", cumplen
una de las condiciones o ambas.
Queremos recuperar los libros que NO cumplan la condicin dada, por ejemplo, aquellos cuya
editorial NO sea "Planeta":
select *from libros
where not editorial='Planeta';
"or") permite establecer el orden de prioridad de la evaluacin; adems permite diferenciar las
expresiones ms claramente.
Por ejemplo, las siguientes expresiones devuelven un resultado diferente:
select *from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select *from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);
Si bien los parntesis no son obligatorios en todos los casos, se recomienda utilizarlos para evitar
confusiones.
El orden de prioridad de los operadores lgicos es el siguiente: "not" se aplica antes que "and" y
"and" antes que "or", si no se especifica un orden de evaluacin mediante el uso de parntesis. El
orden en el que se evalan los operadores con igual nivel de precedencia es indefinido, por ello se
recomienda usar los parntesis.
Entonces, para establecer ms de una condicin en un "where" es necesario emplear operadores
lgicos. "and" significa "y", indica que se cumplan ambas condiciones; "or" significa "y/o", indica
que se cumpla una u otra condicin (o ambas); "not" significa "no.", indica que no se cumpla la
condicin especificada.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla y la creamos:
drop table libros;
create table libros(
codigo number(5),
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
precio number(6,2)
);
86 de 89
Recuperamos los libros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos:
select *from libros
where (autor='Borges') and
(precio<=20);
Note que aparecen todos los libros de "Borges" y todos los libros de "Planeta", algunos cumplen
ambas condiciones.
Recuperamos los libros cuya editorial NO es "Planeta":
select *from libros
where not editorial='Planeta';
Veamos un ejemplo de cmo el empleo de parntesis permite a Oracle evaluar en forma diferente
ciertas consultas aparentemente iguales:
select *from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select *from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);
Note que el primer resultado retorna todos los libros de "Borges" (primera condicin) y todos los
libros de "Paidos" con precio inferior a 20 (segunda condicin) (registros 1,2,6 y 8); la segunda
recupera todos los libros de "Borges" o de "Paidos" (primera condicin) cuyo precio sea inferior a
20 (segunda condicin) (registros 1,6 y 8).
Primer problema:
Trabaje con la tabla llamada "medicamentos" de una farmacia.
1- Elimine la tabla y crela con la siguiente estructura:
drop table medicamentos;
create table medicamentos(
codigo number(5),
nombre varchar2(20),
laboratorio varchar2(20),
precio number(5,2),
cantidad number(3),
primary key(codigo)
);
87 de 89
into
into
into
into
into
medicamentos
medicamentos
medicamentos
medicamentos
medicamentos
values(102,'Buscapina','Roche',4.10,200);
values(205,'Amoxidal 500','Bayer',15.60,100);
values(230,'Paracetamol 500','Bago',1.90,200);
values(345,'Bayaspirina','Bayer',2.10,150);
values(347,'Amoxidal jarabe','Bayer',5.10,250);
4- Recupere los cdigos y nombres de los medicamentos cuyo laboratorio sea "Roche' y cuyo precio
sea menor a 5 (1 registro cumple con ambas condiciones)
5- Recupere los medicamentos cuyo laboratorio sea "Roche" o cuyo precio sea menor a 5 (4
registros)
6- Muestre todos los medicamentos cuyo laboratorio NO sea "Bayer" y cuya cantidad sea=100.
Luego muestre todos los medicamentos cuyo laboratorio sea "Bayer" y cuya cantidad NO sea=100
7- Recupere los nombres de los medicamentos cuyo precio est entre 2 y 5 inclusive (2 registros)
8- Elimine todos los registros cuyo laboratorio sea igual a "Bayer" y su precio sea mayor a 10 (1
registro eliminado)
9- Cambie la cantidad por 200, de todos los medicamentos de "Roche" cuyo precio sea mayor a 5 (1
registro afectado)
10- Muestre todos los registros para verificar el cambio.
11- Borre los medicamentos cuyo laboratorio sea "Bayer" o cuyo precio sea menor a 3 (3 registros
borrados)
Segundo problema:
Trabajamos con la tabla "peliculas" de un video club que alquila pelculas en video.
1- Elimine la tabla y crela con la siguiente estructura:
drop table peliculas;
create table peliculas(
codigo number(4),
titulo varchar2(40) not null,
actor varchar2(20),
duracion number(3),
primary key (codigo)
);
88 de 89
4- Recupere los registros cuyo actor sea "Tom Cruise" o "Richard Gere" (3 registros)
5- Recupere los registros cuyo actor sea "Tom Cruise" y duracin menor a 100 (ninguno cumple
ambas condiciones)
6- Recupere los nombres de las pelculas cuya duracin se encuentre entre 100 y 120 minutos(5
registros)
7- Cambie la duracin a 200, de las pelculas cuyo actor sea "Daniel R." y cuya duracin sea 180 (1
registro afectado)
8- Recupere todos los registros para verificar la actualizacin anterior
9- Borre todas las pelculas donde el actor NO sea "Tom Cruise" y cuya duracin sea mayor o igual
a 100 (2 registros eliminados)
89 de 89