Beruflich Dokumente
Kultur Dokumente
Materia m3s2
Este curso pretende ser una introducción al SQL, y en particular a la versión que utiliza el
SGBD Oracle (7.3) llamado SQL*Plus. No se pretende realizar un estudio exhaustivo de
todas las opciones, comandos y aspectos de almacenamiento y administración que se
pueden considerar en SQL. Sólo se ha pretendido introducir y explicar los comandos más
utilizados con sus opciones más útiles, dejando los detalles más específicos a los manuales
de referencia.
Las razones que me han movido a construirlo en HTML y facilitar su acceso mediante Web
son las posibilidades de interacción con el texto y de mayor difusión. Por ahora las tablas
de ejemplo son estáticas y se encuentran en el texto mismo, pero mi intención es que se
pueda interactuar con una base de datos en tiempo real. ¿Quizás más adelante?.
Si tienes cualquier sugerencia o encuentras una errata escondida dímelo.
2 Tipos de Sentencias
Sentencia
Objetivo
DML
Insert Añadir filas de datos a una tabla.
Delete Eliminar filas de datos de una tabla.
Update Modificar los datos de una tabla.
Select Recuperar datos de una tabla.
Commit Confirmar como permamentes las modificaciones realizadas.
Deshacer todas las modificaciones realizadas desde la última
Rollback
confirmación.
3 SQL*Plus
La herramienta que nos proporciona ORACLE para interactuar con la base de datos se
llama SQL*Plus. Básicamente, es un intérprete SQL con algunas opciones de edición y
formateo de resultados.
Antes de ver la manera de conectarse a SQL*Plus, conviene tener claros algunos conceptos:
Usuario/Clave
Para poder acceder a una base de datos gestionada por ORACLE debemos ser un
usuario autorizado de la misma y conocer la palabra clave, password, asociada al
usuario.
Variable de ambiente ORACLE_SID
Indica la base de datos con la que vamos a trabajar.
$ sqlplus usuario/passwd
donde le indicamos al SGBD Oracle quién somos y nuestra palabra clave.
Si la configuración del SGBD Oracle se corresponde a una configuración cliente-servidor
asentada sobre una red (SQL*Net v2) deberemos indicar, además, el sevicio (o base de
datos) con el que queremos contactar. Esto se hace colocando el símbolo @ antes del
nombre del servicio como se indica a continuación:
$ sqlplus usuario/passwd@servicio
Otra circunstancia que hay que tener en cuenta a la hora de conectarnos a SQL*Plus es el
modo establecido por el DBA para la autentificación del usuario de la base de datos. La
primera posibilidad es que recaiga sobre el SGBD Oracle la autentificación de los usuarios,
por lo que tendremos que darle nuestro nombre de usuario y la palabra de paso. Pero existe
la posibilidad de que el SGBD Oracle deje en manos del Sistema Operativo esta
responsabilidad. Así, no será necesario demostrarle al SGBD Oracle quién somos ya que el
SO se ha encargado previamente de comprobar que todo es correcto. En este segundo caso,
el comando de conexión con SQL*Plus debe omitir el nombre de usuario y la palabra clave,
pero manteniendo el resto de esta manera:
Ana Gabriela Mora Baltazar 4c
Materia m3s2
$ sqlplus /@servicio
Una vez que hemos conseguido entrar en SQL*Plus nos presenta el prompt y espera la
insercción de sentencias SQL. Todas las sentencias deben acabar con un ';'. Una sentencia
puede continuar en varias líneas, que SQL*Plus va numerando. Si queremos anular la
sentencia actual podemos hacerlo colocando un '.' como único carácter en una línea. Si
queremos volver a ejecutar la última sentencia se puede hacer con el comando '/'. Si
queremos ejecutar las sentencias que almacena un fichero .sql podemos hacerlo
anteponiendo el símbolo '@' al nombre del fichero.
Para cerrar la sesión vale con teclear 'exit'.
3.2 Posibilidades de Edición
SQL*Plus almacena en un buffer la última sentencia SQL introducida. El buffer mantiene
sólo una sentencia cada vez, y si se introduce una nueva sentencia se sobreescribe sobre la
anterior.
La sentencia en el buffer puede ser recuperada para ejecutarla de nuevo con los comandos:
• RUN que visualiza la sentencia en el buffer antes de ejecutarla;
• / que ejecuta la sentencia sin visualizarla.
SQL*Plus también nos permite editar la sentencia SQL alamacenada en el buffer mediante
un sencillo (y limitado) editor en línea, cuyos comandos se enumeran a continuación:
Comando Abreviatura
Descripción
APPEND texto A texto Añade texto al final de la línea.
Cambia el contenido 'fuente' por el
CHANGE/fuente/destino C/fuente/destino
'destino'
CHANGE/texto C/texto Quita 'texto' de una línea.
CLEAR BUFFER CL BUFF Borra el buffer
DEL DEL Borra una línea.
INPUT I Inserta una o más líneas.
INPUT texto I texto Inserta una línea con 'texto'.
LIST L Lista las líneas del buffer
LIST n Lnón Lista la línea n-ésima.
LIST * L* Lista la línea actual.
LIST LAST L LAST Lista la última línea.
Lista las líneas desde la m-ésima a la
LIST m n Lmn
n-ésima.
Al contenido del buffer también se puede acceder desde el editor del Sistema Operativo.
Así, el buffer podrá ser manipulado con las posibilidades del editor con el que estemos
acostumbrados a trabajar. Al salir del editor se devuelve el control al SQL*Plus. Para
conseguir trabajar con el editor del Sistema Operativo basta con colocar la variable
DEFINE_EDITOR y luego llamar al editor.
SQL> define_editor=vi
SQL> edit
Ana Gabriela Mora Baltazar 4c
Materia m3s2
4 Creación
La primera fase de cualquier base de datos comienza siempre con sentencias DDL, ya que
antes de poder almacenar información debemos definir los objetos básicos donde agrupar la
información. Los objetos básicos con que trabaja SQL son las tablas. Una tabla es un
conjunto de celdas agrupadas en filas y columnas donde se almacenan elementos de
información.
Antes de llevar a cabo la creación de una tabla conviene planificar:
• nombre de la tabla,
• nombre de cada columna,
• tipo y tamaño de los datos almacenados en cada columna,
• información adicional, restricciones, etc.
Hay que tener en cuenta también ciertas restricciones en la formación de los nombres de las
tablas: longitud máxima de 30 caracteres, no puede haber nombres de tabla duplicados,
deben comenzar con un carácter alfabético, permitir caracteres alfanuméricos y el guión
bajo '_', y Oracle no distingue entre mayúsculas y minúsculas
Ana Gabriela Mora Baltazar 4c
Materia m3s2
REM
REM tabla empleado con un código de empleado, un nombre, un
oficio, un
REM jefe, una fecha de alta en la empresa, un salario mensual,
una
REM comisión y el código del departamento donde trabaja.
REM
create table emp (
cod_emp number(3),
nombre varchar2(10) not null,
oficio varchar2(11),
jefe number(3),
fecha_alta date,
salario number(10),
comision number(10),
cod_dep number(3),
constraint emp_pk primary key (cod_emp),
constraint emp_fk foreign key (cod_dep) references
dep(cod_dep)
on delete cascade,
constraint emp_ck check (salario > 0)
);
Oracle nos proporciona un comando que resulta muy útil cuando queremos conocer la
estructura de una tabla, las columnas que la forman y su tipo y restricciones. Este comando
toma una mayor importancia según nos alejemos del momento de creación de una tabla.
La sintásis es la siguiente
DESCRIBE tabla
5 Modificación
Después de crear una tabla, a veces nos encontramos con que se necesita añadir una
columna adicional o modificar la definición de una columna existente. Esta operación se
puede realizar con el comando ALTER TABLE.
ALTER TABLE tabla {ADD | MODIFY} ({columna tipoColumna
[NOT NULL],}+);
Hay que tener en cuenta varios puntos:
• No es posible disminuir el tamaño de un columna.
• En las modificaciones, los tipos anterior y nuevo deben ser compatibles, o la tabla
debe estar vacía.
• La opción ADD ... NOT NULL sólo será posible si la tabla está vacía.
Ana Gabriela Mora Baltazar 4c
Materia m3s2
• La opción MODIFY ... NOT NULL sólo podrá realizarse cuando la tabla no contenga
ninguna fila con valor nulo en la columna en cuestión.
Por ejemplo la sentencia siguiente añade la fecha de nacimiento a la tabla de empleados.
SQL> alter table emp add (fecha_nac date not null);
También se puede querer modificar una tabla añadiendo o eliminando restricciones. En este
caso el comando a utilizar será
Materia M3S2