Sunteți pe pagina 1din 45

Unidad 6 Escribir sub-consultas

Objetivo: El alumno será capaz de conocer los diferentes


tipos de solución con subquerys, listar los diferentes tipos
de subquerys escribir subquerys de renglón simple y
múltiple.

Sugerencias didácticas
Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de
dificultad y con base en cada una de las instrucciones que los componen, enseñar la sintaxis
del lenguaje y la finalidad de cada una de ellas.
Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.
Solicitarle la elaboración de programas similares, agregándoles algunas variantes.
Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.
Sugerencias de evaluación
El docente deberá considerar la evaluación, no solo como un medio de medir el
aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje,
además de los exámenes tradicionales se recomienda se tome en cuenta: participación en
clases, elaboración de prácticas en el laboratorio y proyectos.

Bibliografía
Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.
Práctica 6: Escribir sub-consultas

1. Write a query lo display the employee name and hire date for all employees in the
same department as Blake. Exclude Blake.

ENAME HIREDATE
---------- ---------
ALLEN 20-FEB-81
WARD 22-FEB-81
MARTIN 28-SEP-81
TURNER 08-SEP-81
JAMES 03-DIC-81

2. Create a query to display the employee number and name for all employees who
earn more than the average salary. Son the results in descending order of salary.

EMPNO ENAME
--------- ----------
7839 KING
7788 SCOTT
7902 FORD
7566 JONES
7698 BLAKE
7782 CLARK

6 rows selected.

3. Write a query that will display the employee number and name for all employees
who work in a department with any employee chose name contains a T. Save your
SQL statement in a file called p6q3. sql.

EMPNO ENAME
--------- ----------
7369 SMITH
7876 ADAMS
7902 FORD
7788 SCOTT
7566 JONES
7499 ALLEN
7698 BLAKE
7654 MARTIN
7900 JAMES
7844 TURNER
7521 WARD
11 rows selected.

4. Display the employee name, department number, and job title for all employees
whose department location is Dallas.

ENAME DEPTNO JOB


---------- --------- ---------
SMITH 20 CLERK
JONES 20 MANAGER
SCOTT 20 ANALYST
ADAMS 20 CLERK
FORD 20 ANALYST

5. Display the employee name and salary of all employees who report to King.

ENAME SAL
---------- ---------
JONES 2975
BLAKE 2850
CLARK 2450

6. Display the department number, name, and job for all employees in the Sales
department.

DEPTNO ENAME JOB


--------- ---------- ---------
30 ALLEN SALESMAN
30 WARD SALESMAN
30 MARTIN SALESMAN
30 BLAKE MANAGER
30 TURNER SALESMAN
30 JAMES CLERK

6 rows selected.

If you have time, complete the following exercises:

7. Modify p6q3.sql to display the employee number, name. and salary for all
employees who earn more than the average salary and who work in a department
with any employee with a T in their name. Resave as p6q7.sql. Rerun your query.

EMPNO ENAME SAL


--------- ---------- ---------
7902 FORD 3000
7788 SCOTT 3000
7566 JONES 2975
7698 BLAKE 2850
Unidad 7 Sub-consultas en múltiples columnas
Objetivo: El alumno será capaz de escribir subquerys con
múltiples columnas, describir la recuperación de valores
nulos, escribir subquerys en la cláusula FROM.

Sugerencias didácticas
Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de
dificultad y con base en cada una de las instrucciones que los componen, enseñar la sintaxis
del lenguaje y la finalidad de cada una de ellas.
Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.
Solicitarle la elaboración de programas similares, agregándoles algunas variantes.
Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.
Sugerencias de evaluación
El docente deberá considerar la evaluación, no solo como un medio de medir el
aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje,
además de los exámenes tradicionales se recomienda se tome en cuenta: participación en
clases, elaboración de prácticas en el laboratorio y proyectos.

Bibliografía
Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.
Práctica 7: Sub-consultas en múltiples columnas

1. Write a query to display the name, department number, and salary of any employee
whose department number and salary match the department number and salary of
any employee who earns a commission.

ENAME DEPTNO SAL


---------- --------- ---------
WARD 30 1250
MARTIN 30 1250
TURNER 30 1500
ALLEN 30 1600

2. Display the name, department name, and salary of any employee whose salary and
commission match the salary and commission of any employee located in Dallas.

ENAME DNAME SAL


---------- -------------- ---------
SMITH RESEARCH 800
ADAMS RESEARCH 1100
SCOTT RESEARCH 3000
FORD RESEARCH 3000
JONES RESEARCH 2975

3. Create a query to display the name, hire date, and salary for all employees who
have both the same salary and commission as Scott. Note : Do not display SCOTT
in the result set.

ENAME HIREDATE SAL


---------- --------- ---------
FORD 03-DIC-81 3000

4. Create a query to display the employees that earn a salary that is higher than the
salary of all of the clerks. Sort the results on salary from highest to lowest.

ENAME JOB SAL


---------- --------- ---------
KING PRESIDENT 5000
SCOTT ANALYST 3000
FORD ANALYST 3000
JONES MANAGER 2975
BLAKE MANAGER 2850
CLARK MANAGER 2450
ALLEN SALESMAN 1600
TURNER SALESMAN 1500

8 rows selected.
Unidad 8 Producir impresiones legibles con SQL *PLUS
Objetivo: El alumno será capaz de personalizar el ambiente
de trabajo SQL *PLUS produciendo reportes legibles,
almacenar la configuración de configuración.

Sugerencias didácticas
Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de
dificultad y con base en cada una de las instrucciones que los componen, enseñar la sintaxis
del lenguaje y la finalidad de cada una de ellas.
Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.
Solicitarle la elaboración de programas similares, agregándoles algunas variantes.
Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.
Sugerencias de evaluación
El docente deberá considerar la evaluación, no solo como un medio de medir el
aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje,
además de los exámenes tradicionales se recomienda se tome en cuenta: participación en
clases, elaboración de prácticas en el laboratorio y proyectos.

Introducción
SQL*PLUS es una herramienta de Oracle que permite unir comandos SQL a través de
procedimientos lógicos. Además es una de las tantas maneras de trabajar directamente con
la base de datos. Usualmente se utiliza para manipular y desplegar los datos en la pantalla.
Con SQL *PLUS se puede fácilmente comenzar a usar la base de datos, recuperar y ajustar
el formato de los datos. Además, SQL*PLUS permite asegurar el acceso a la base de
datos permitiendo que se restringa con un comando, es utilizado con frecuencia por DBAs
y desarrolladores e interactúan recíprocamente con la base de datos de Oracle.
El predecesor de SQL *PLUS fue llamado UFI (Interfaz de Uso Fácil) y fue incluido en los
primeros lanzamientos de Oracle hasta la versión 4, la interfaz de UFI era extremadamente
primitivo.
Sus principales características son:
o Ingresar, editar, almacenar, mostrar y ejecutar comandos SQL y bloques de PL-
SQL. Descripción de objetos y muchas otras sofisticadas características, el editor
impresiona a los mas exigentes usuarios.
o Mostrar resultados, hacer cálculos en queries (incluso como página web). Le
permite usar fácilmente reportes estándar o reportes creados por usted mismo.
o Mostrar el contenido de las tablas.
o Ingresar y copiar entre bases de datos.
o Administrar la base de datos.
o Desarrollar y ejecutar scripts sin tener que dejar el confortable SQL *PLUS
Se puede utilizar SQL *PLUS conjuntamente con el lenguaje PL-SQL, SQL *PLUS
permite que se almacenen y recuperen datos de Oracle, permite manipular comandos de
SQL y bloques de PL-SQL
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:
o 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, contraseña , asociada al
usuario.
o Variable de ambiente ORACLE_SID
Indica la base de datos con la que vamos a trabajar.
Conexión
Para ingresar a SQL*Plus debe ejecutar el comando
$ sqlplus usuario/contraseña

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 servicio (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/contraseña@servicio

Otra circunstancia que hay que tener en cuenta al momento de conectarse es el modo
establecido por el DBA para la autentificación del usuario de la base de datos. La primera
posibilidad es que la autentificación de los usuarios recaiga sobre el SGBD Oracle, por lo
que tendremos que darle nuestro nombre de usuario y contraseña. Pero existe la posibilidad
de que el SGBD Oracle deje en manos del Sistema Operativo esta responsabilidad. Así, no
SQL
*PLUS

será necesario demostrarle al SGBD Oracle quién somos ya que el sistema operativo 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:
$ sqlplus /@servicio

Una vez que hemos conseguido entrar en SQL*Plus nos presenta el prompt y espera la
inserció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 archivo con extensión .sql podemos
hacerlo anteponiendo el símbolo '@' al nombre del archivo.
Para cerrar la sesión teclear 'exit'.
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 que se sobre-escribe
sobre la anterior.
La sentencia en el buffer puede ser recuperada para ejecutarla de nuevo con los comandos:
o RUN que visualiza la sentencia en el buffer antes de ejecutarla;
o / que ejecuta la sentencia sin visualizarla.
SQL*Plus también nos permite editar la sentencia SQL almacenada 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.
CHANGE/fuente/destino C/fuente/destino Cambia el contenido 'fuente' por el '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.
LIST m n Lmn Lista las líneas desde la m-ésima a la 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

Utilización de archivos con extensión SQL


SQL*Plus considera dos tipos de archivos: de spool y de comandos.
Un archivo de spool almacena los resultados de una consulta (o varias) en un archivo con la
extensión .lst (o lo manda a la impresora). Los comandos asociados con los archivos spool
son:
o SPOOL archivo Manda el resultado de las consultas al archivo.
o SPOOL OUT Manda el resultado de las consultas a la impresora.
o SPOOL OFF Cierra el archivo de spool.
o EXIT Al salir de SQL*Plus se cierran los archivos de spool.
Los archivos de comandos almacenan comandos SQL y SQL*Plus para ser editado,
almacenado y ejecutado; y tienen por defecto la extensión .sql :
o Para editarlo se puede utilizar el comando edit archivo.
o Para ejecutarlo se utilizará el comando START archivo o @archivo
El SQL*Plus nos proporciona más posibilidades en relación con los archivos de comandos,
la comunicación con el usuario final y la generación de informes. Pero antes de ver este
tipo de cosas, es mejor que sigamos profundizando en el conocimiento del lenguaje SQL.
Variables de sustitución
En SQL * PLUS se puede utilizar el & para guardar valores temporalmente. Se pueden
predefinir variables utilizando los comandos ACCEPT y DEFINE.
o ACCEPT lee en línea la entrada de Usuario y la almacena en un variable.
o DEFINE crea y asigna el valor en una variable.
Otros Efectos Interactivos:
No se restringen los efectos interactivos para poder dirigir la cláusula WHERE. El mismo
principio puede ser utilizado para lograr otras metas. Por ejemplo:
o Dinámicamente altera títulos
o Obtiene el valor de entrada del archivo.
o Los valores de paso, los toma de una sentencia SQL a otra.
Asegúrese que los valores de entrada sean simples e inequívocos Cuando se ejecuta un
reporte, el usuario necesita restringir los datos devueltos dinámicamente. SQL *PLUS
provee esta flexibilidad por medio de las variables de usurario. Use el ampersand (&) para
identificar la variable en la sentencia de SQL *PLUS, no se necesita definir el valor de cada
variable.
Notación Descripción
&user_variable Indica una variable de SQL. Si la variable no existe, SQL *PLUS insiste para
que se le asigne un valor

Ejemplo:
SQL> SELECT empno, ename, sal, depto
FROM emp
WHERE empno = &employee_num;

Enter value for employee_num: 7369

EMPNO ENAME SAL DEPTNO


----- ----- --- --------
7369 SMITH 800 20

SQL> define oficio=Analista


SQL> define tabla=emp
SQL> select nombre, oficio from &tabla where oficio='&oficio';
old 1: select nombre, oficio from &tabla where oficio='&oficio'
new 1: select nombre, oficio from emp where oficio='Analista'

Comando SET VERIFY


Para confirmar los cambios de las sentencias de SQL, SQL *PLUS utiliza el comando SET
VERIFY. Utilizando este comando SQL *PLUS obliga a desplegar el valor de las variables
antes y después de reemplazar.
SQL> SET VERIFY ON
SQL> SELECT empno, ename, sal, deptno
2 FROM emp
3 WHERE empno= &employee_num;

Enter value for employee_num: 7369

Old 3: WHERE empno=&employee_num


New 3: WHERE empno=7369

El ejemplo despliega el valor anterior y el valor nuevo de la columna EMPNO. En los casos
de valores de fecha y Carácter con variables de substitución. En la cláusula WHERE, los
valores de fecha y carácter deben se ser agrupadas entre ‘ ‘ , la misma regla se aplica para la
substitución de datos. También se pueden especificar nombres de columnas, expresiones, y
texto en tiempo de ejecución, no solo puede utilizar variables de substitución en la clausula
WHERE, sino también en nombres de columnas, expresiones o texto.
Ejemplo
SQL> SELECT ename, &column_name
2 FROM emp
3 WHERE &condition

Enter value for colum_name: job


Enter value for condition: deptno=10
ENAME JOB
---------- ---------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK

Si no se introduce el valor para la variable de sustitución, se generará un error.


Doble ampersand (&&) para la sustitución de variables.
Se puede utilizar doble ampersand (&&) para la sustitución de variables, si desea volver a
utilizar el valor para una misma variable y solamente se solicitará una sola vez el valor.
SQL> SELECT empno, ename, job, &&column_nam
FROM emp
ORDER BY &colum_name

Enter value for colum_name: deptno

EMPNO ENAME JOB DEPTNO


----- ------ -------------- ------
7839 KING PRESIDENT 10
7782 CLARK MANAGER 10
7934 MILLER CLERK 10

En el ejemplo el usuario introduce el valor para colum_name, solo una vez y este valor
sustituye a la columna y el orden de los datos.
Definiendo las variables de usuario
Se pueden predefinir variables de usuario antes de ejecutar una sentencia SELECT . SQL
*PLUS provee dos comandos para definir y agregar variables de usuario DEFINE y
ACCEPT.

Comando Descripción
DEFINE variable=value Crea una variable tipo CHAR y le asigna un valor
DEFINE variable Despliega una variable, su valor y el tipo de dato
DEFINE Despliega a todas las variables de usuario su valor y tipo de dato
ACCEPT Lee a una línea la entrada del usuario y la almacena en una variable

Comando ACCEPT.
o Permite personalizar para el usuario la entrada de algún valor
o Explícitamente define una variable de tipo NUMBER o DATE.
o Oculta la entrada del usuario por razones de seguridad.
ACCEPT variable [datatype] [FORMAT format] [PROMPT text] [HIDE]
Sintaxis:
Variable en el nombre de la variable que almacena el valor (si no existe, SQL *PLUS
la crea)
Datatype puede ser NUMBER, CHAR, o DATE
FORMAT especifica el formato, por ejemplo A10, 9.999
PROMPT text es el texto que se despliega antes de que el usuario introduzca el
valor.
HIDE oculta el valor que introduce el usuario, (como un password).
Ejemplo
ACCEPT dept PROMPT ‘Provide the department name:’
SELECT *
FROM dept
WHERE dname = UPPER(‘&dept’)

Provide the department name: Sales

DEPTNO DNAME LOC


------ ---------- -------
30 SALES CHICAGO

Comandos DEFINE Y UNDEFINE


Las variables de definen hasta que:
o Use el comando UNDEFINE para aclararlo.
o Salga de SQL *PLUS
o Se pueden verificar los cambios con el comando DEFINE.
o Definir las variables para cada sesión, se modifica el archivo login.sql para que cada
variable sea creada al iniciar.
SQL> DEFINE deptname=sales
SQL> DEFINE deptname
DEFINE deptname = “sales”(CHAR)

Crea una variable para almacenar el nombre del departamento y esta se puede utilizar como
cualquier otra.
SQL> SELECT *
FROM dept
WHERE dname = UPPER(‘&deptname’);

El ejemplo crea la variable deptname, que contiene el nombre del departamento SALES, la
sentencia de SQL despliega la número de departamento, el nombre y la localidad.
DEPTNO DNAME LOC
------ ------ -------
30 SALES CHICAGO

Para borrar la variable definida, use el comando UNDEFINE:


SQL> UNDEFINE deptname
SQL> DEFINE deptname
Symbol deptname is UNDEFINE.

Personalizando el ambiente de SQL *PLUS


o Utilice los comandos SET para controlar la sesión actual
SET system_variable value

o Verifique los comandos utilizados de SET con el comando SHOW


SQL> SET ECHO ON
SQL> SHOW ECHO
echo ON

Se puede controlar el ambiente de SQL *PLUS con los comandos SET


Sintaxis:
System_variable es una variable que controla el aspecto del ambiente en la
sesión.
Value es el valor para la variable del sistema.
Para poder mostrar todos los valores de los comando SET utilice el comando SHOW ALL.

Variable y valor de comando SET Descripción


ARRAY[SIZE] {20 n} Establece el tamaño de los datos de la Base de Datos
COLSEP{text} Establece el texto que se imprime entre columna (por default es un
espacio sencillo)
FEED[BACK] {6nOFFON} Despliega el n registros seleccionados por un Query.
HEA[DING] {OFFON} Determina si se despliegan los titulos de las columnas, en los reportes.
LIN[ESIZE] {80n} Determina el número de caracteres por línea hasta n en los reportes
LONG {80n} Determina la máxima longitud de los valores LONG
PAGES[IZE]{24n} Especifica el número de líneas por página
PAU[SE] {OFFONtext}
TERM[OUT] {OFF ON} Determina si el reporte se despliega en la pantalla.
BUF[FER] {buffer|SQL} Hace que el buffer intermediario especificado, sea el buffer
intermediario actual.
DOC[UMENT] {OFF|ON} Despliega o suprime bloques de documentación creados por el comando
DOCUMENT
SCAN {OFF|ON} Controles que exploran la presencia de las variables y de los parámetros
de la substitución. OFF suprime el proceso de las variables y de los
parámetros de la substitución; ON permite el proceso normal.
SPACE {1|n} Fija el número de espacios entre las columnas en la salida. El valor
máximo de n es 10.
TRUN[CATE ] {OFF|ON} Controla si SQL*Plus trunca o envuelve un artículo de datos que
sea demasiado largo para la línea actual.
Valores predefinidos utilizando el archivo login.sql
El archivo login.sql contiene comandos SQL *PLUS y SET con valores standard que se
requiere para cada sesión. Al leerse el archivo, los comando se ejecutan durante la
conexión. Cuando se termina la sesión todos los valores personalizados se pierden.
Modificar los valores por default.
Los valores implementados en login.sql pueden ser cambiados durante la sesión y
solamente son tomados en cuenta para esta, tan pronto se desconecta de la sesión estos
valores se pierden.
Comandos para dar Formato SQL *PLUS
Se pueden controlar las características de los reportes utilizando los siguientes comandos:

Comando Descripción
COL[UMN] {column option} Controla el formatos de las columnas
TTI[TLE] {text OFF ON} Especifica un título para cada página del reporte
BTI[TLE] {text OFF ON} Especifica un pie de página para el reporte
BRE[AK] {ON report_element} Auprime valores duplicados y secciona filas de datos con avances de
línea

Sugerencias:
o Todos los comandos de formatos siguen teniendo efecto hasta al final de sesión de
SQL *PLUS.
o Recuerde configurar sus valores predefinidos de SQL *PLUS después de cada
informe.
o Se debe saber el valor especifico y registrarlo cada vez que entra a una sesión ya
que no existe un comando que predefina valores a una variable.
o Si usted da un alias a su columna usted debe referirse al nombre del alias no al
nombre de la columna.
Con SQL*Plus podemos dar forma a los resultados de las consultas para producir un
informe. Podremos:
o Cambiar las cabeceras de las columnas.
o Dar forma a las columnas de tipo number, varchar2, date y long.
o Copiar y listar atributos de presentación de las columnas.
o Suprimir valores duplicados e introducir espacios para mejorar la presentación.
o Realizar y mostrar cálculos (totales, medias, mínimos, máximos, etc.).
o Definir las dimensiones de las páginas.
o Ubicar títulos en la cabecera y pie de las páginas.
o Introducir la fecha o el número de página en los títulos.
Pero de todo esto sólo vamos a ver el modo de realizar las operaciones más comunes y
sencillas.
Básicamente, el formato con el que se van a presentar los resultados de las cosultas
dependen de unos parámetros y de unos comandos.
El comando COLUMN

Opción Descripción
CLE[AR] Borra el formato de cualquier columna
FOR[MAT] format
HEA[DING] text Fija el título en la columna (Si no se utiliza la justificación una línea vertical
forzará que el título avance una línea)
JUS[TIFY] {align} Justifica el titulo de la columna ya sea izquierda, centro o derecha
NOPRI[INT] Oculta la columna
NUL[L] text Especifíca el texto que se desplegará para los valores NULL
PRI[NT] Muestra la columna
TRU[NCATED] Trunca la secuencia en el extremo de la primera línea del informe
WRA[PED] Cambia el final de la palabra a la siguiente línea

Crear títulos para las columnas


COLUMN ename HEADING ‘Employee|Name’ FORMAT A15
COLUMN sal JUSTIFY LEFT FORMAT $99,990.00
COLUMN mgr FORMAT 999999999 NULL ‘No manager’

o Despliega el valor actual para el nombre


COLUMN ename

o Ajuste para la columna ENAME


COLUMN ename CLEAR

Para realizar ajustes actuales para las columnas, utilice los siguientes comandos:

Comando Descripción
COL[UMN] column Despliega el valor de la columna especificada
COL[UMN] Despliega el valor de todas las columnas
COL[UMN] column CLEAR Quita ajustes para la columna especifica
CLE[AR] COL[UMN] Quita ajustes para todas las columnas
Comandos TITLE Y BTITLE
o Formato par Títulos y Pie de Página
TTI[TLE] [text|OFF|ON]

o Especificar el título del reporte


SQL> TTITLE ‘Salary|Report’

o Especificar el Pie de Página


SQL> BTITLE ‘Confidential’

Utilice el comando TITLE para dar formato a los títulos de la página y el comando
BTITLE para los pies de pagina. Los pies de página aparecen al final de la página de
acuerdo al valor del PAGESIZE.
La sintaxis para TITLE y BTITLE son idénticas, en la sintaxis se puede utilizar la | (barra
vertical) para separar el título en varias líneas.
En la sintaxis:
text representa el texto del títtulo.
El ejemplo anterior establece el título de Salary centrado en una línea y Report en la
siguiente. En el ejemplo de BTITLE en el pie de página del reporte se muestra
Confidential. El comando TTITLE muestra automáticamente la fecha y el número de
página en el reporte.

Elemento Descripción Ejemplo Resultado


An Fija el ancho de la columna hasta n N/A N/A
9 Dígito simple sin el cero 999999 1234
0 Incluye el cero 099999 01234
$ Incluye el signo de dollar $9999 $1234

L Modo local L9999 L1234


. Posición del punto decimal 9999.99 1234.00
, Separador de miles 9,999 1,234

Comando BREAK
Elimina las filas duplicadas
o Para suprimir los duplicados
SQL> BREAK ON ename ON job

o Para seleccionar las un grupo de filas


SQL> BREAK ON ename SKIP 4 ON job SKIP 2
Se puede usar el comando para seleccionar un grupo de filas y eliminar los valores
duplicados. Para asegurarnos que el comando BREAK se haya ejecutado bien, usar el
comando ORDER BY para ordenar las columnas.
Sintaxis:
BREAK on column [|alias|row] [skip n|dup|page] on … [on report]

Donde: page cambia a una pagina nueva cuando el valor de


BREAK cambia
skip n salta n número de líneas cuando el valor de
BREAK c ambia, y puede ser activado con:
Column
Row
Page
Report
duplicate despliega los valores duplicados
Para limpiar todos los valores de BREAK utilizar el comando CLEAR:
CLEAR BREAK
Cuando se utiliza la cláusula ORDER BY en el comando SELECT de SQL, las filas con el
mismo valor en la columna pedida (o la expresión) se exhiben juntas en su salida. Usted
puede hacer esta salida más útil al usuario usando los comandos de BREAK y de
CÁLCULO del SQL*Plus.
La columna que usted especifica en un comando de BREAK se llama una columna de la
rotura. Incluyendo la columna de la rotura en su ORDER BY cláusula, usted crea
subconjuntos significativos de expedientes en su salida. Usted puede entonces agregar el
formato a los subconjuntos dentro del mismo comando de BREAK, y agrega una línea de
suma (que contiene totales, los promedios, etcétera) especificando la columna de la rotura
en un comando de CÁLCULO.
SQL> SELECT DEPTNO, ENAME, SAL
2 FROM EMP
3 WHERE SAL < 2500
4 ORDER BY DEPTNO;

Produce el siguiente resultado:


DEPTNO ENAME SAL
--------- ---------- ---------
10 CLARK 2450
10 MILLER 1300
20 SMITH 800
20 ADAMS 1100
30 ALLEN 1600
30 JAMES 950
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
Para hacer este informe más útil, se podría utilizar el comando BREAK para establecer
DEPTNO como la columna de la rotura. A través de BREAK se podría suprimir valores
duplicados en DEPTNO y poner líneas en blanco o comenzar una página nueva entre los
departamentos. Se podría utilizar la comando BREAK conjuntamente con CÁLCULO para
calcular y para imprimir las líneas que contengan totales (y/o hacer un promedio, máximo,
mínimo, desviación de estándar, variación) el sueldo total para cada departamento y para
todos los departamentos.
Script para ejecutar un Reporte
1) Crear una sentencia SQL SELECT. Asegurese que la información que requiere para
el reporte sea la correcta, asegure que la cláusula ORDER BY este incluida si esta
usa el comando BREAK.
2) Guardar la sentencia en un script.
3) Cargar el script en el editor, para agregar comando SQL *PLUS
4) Agregar los comandos que se requieran para dar formato al reporte antes de la
sentencia SELECT.
5) Verifique que cada línea de la sentencia SELECT termine con un ; o con slash (/)
6) Limpiar todos los valores de formatos después de la sentencia SELECT, esta es una
alternativa.
7) Guardar el archivo script con todos los cambios realizados.
8) En SQL *PLUS un script se puede ejecutar con la palabra START filename o @
filename, este comando requiere leer y ejecutar un archivo script.
Sugerencias.
o Se pueden incluir líneas en blanco entre los comandos de SQL *PLUS.
o Se puede abreviar comandos de SQL *PLUS
o incluya los comandos del reajuste en el extremo del archivo de
o restaurar el ambiente original del SQL
Almacenando e imprimiendo resultados de una reporte
Se pueden enviar los resultados de un reporte a un archivo cuando se desean corregirlos con
un procesador de textos antes de imprimir o incluirlos en otro documento.
Para almacenar los resultados de una reporte en un archivo y todavía exhibirlos en la
pantalla incorpore el comando del SPOOL en la forma siguiente:
SPOOL file_name

Si usted no sigue el nombre de fichero y una extensión, el SPOOL agrega una extensión de
archivo por defecto al nombre de fichero para identificarlo como archivo de salida. El
defecto varía con el sistema operativo del anfitrión; en la mayoría de los anfitriones es LST
o LIS. El SQL*Plus continúa guardando la información al archivo hasta que se marca
como apagado, usando la forma siguiente de SPOOL:
SPOOL OFF
Crear un fichero flat (plano)
Al mover datos entre diversos productos de software, es a veces necesario utilizar un
archivo FLAT (un archivo del sistema operativo sin caracteres del escape, títulos, o
caracteres adicionales ). Por ejemplo, si no se tiene SQL*Net, se necesita crear un fichero
FLAT. Para crear un fichero FLAT con SQL*Plus, primero se debe incorporar los
comandos SET siguientes:
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 80
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF

Enviar resultados a una impresora


Para imprimir resultados de un reporte mándelos a un archivo según lo descrito en la
sección anterior. Entonces, en vez de usar el SPOOL OFF, incorpore el comando en la
forma siguiente:
SPOOL OUT

El SQL*Plus manda y copia el contenido del archivo a su impresora estándar del


ordenador . El SPOOL OUT no suprime el archivo de SPOOL después de imprimir.
A continuación un ejemplo de un informe que lista los apellidos de los empleados y sueldo
de acuerdo a su puesto (title). Además se hacen totales de sueldos por puestos y un gran
total. También envía el informe a un archivo que se llamará INFORME.LST. La extensión
"LST" es la que SQLPlus asigna a los informes que se guardan en un archivo. Ese informe
se puede ver con un editor de texto. A continuación el ejemplo:
SET PAGESIZE 37
SET LINESIZE 60
SET FEEDBACK OFF
SET ECHO OFF
TTITLE ‘Employee|Report’
BTITLE ‘Confidential’
COLUMN title HEADING ‘Job|Category” FORMAT A22
COLUMN last_name HEADING ‘Employee’ FORMAT A22
COLUMN salary HEADING ‘Salary’ FORMAT $99,999.99
BREAK ON title SKIP 1 ON REPORT
COMPUTE SUM OF salary ON title REPORT
SPOOL ON
SPOOL A:INFORME
SELECT title, last_name, salary
FROM s_emp
ORDER BY title, last_name, salary;
SPOOL OFF
CLEAR COMPUTE
CLEAR BREAK
COLUMN salary CLEAR
COLUMN last_name CLEAR
COLUMN title CLEAR
BTITLE OFF
TTITLE OFF
SET FEEDBACK ON
SET ECHO ON
SET LINESIZE 80
SET PAGESIZE 14
/

Líneas de ejecución
Constan de una única barra inclinada, "/", y se introducen a continuación de cada sentencia
SQL indicando su ejecución.
Sustituyen al punto y coma, ";" al final de las sentencias SQL.
Líneas de comandos sql*plus
SQL*Plus aporta una serie de posibilidades al lenguaje SQL que le acerca un poco mas a lo
que entendemos como un lenguaje de programación.
Se pueden definir constantes y variables, capturar datos del teclado, introducir parámetros
en la llamada de un archivo de comandos, y alguna cosa más.
Se pueden introducir comentarios en una archivo de comandos de tres maneras:
o Utilizando del comando REM del SQL*Plus.
o Utilizando los delimitadores de comentario de SQL /* y */.
o Utilizando los símbolos de comentario PL/SQL "__".
Resumen de comandos

@ Ejecuta el comando que se especifica

@@ Ejecuta un commando.

/ Ejecuta un commando de SQL o un bloque PL/SQL


ACCEPT Lee una línea de entrada y la almacena en una variable dada por elusuario.
APPEND Agrega el texto especificado al extremo de la línea actual
BREAK Especifica donde y cómo el formato cambiará en un informe.
BTITLE Especifica el lugar y el formatos del Pie de Página
CHANGE Cambia el texto en la línea actual.
Limpia los reajustes o borra el valor actual para la opción especificada tal como BREAK
CLEAR
o COLUMN
Especifica las cualidades para la exhibición de una columna dada, o enumera las
COLUMN
cualidades actuales de la exhibición para una sola columna o para todas las columnas.
Calcula e imprime líneas, usando varios estándares, en los subconjuntos de filas
COMPUTE
seleccionadas.
CONNECT Se connect a la Base de Datos de Oracle con un Username.
COPY Copia datos de una consulta a una tabla en una base de datos local o remota
DEFINE Especifica una variable de usuario y le asigna un valor CHAR, o enumera el valor y el
tipo variable de una variable o de todas las variables.
DEL Borra una o mas líneas
DESCRIBE Lista las definiciones de la columna para la tabla especificada.
DISCONNEC Confirma que se finalicen los cambios a la base de datos y registra el username actual de
T Oracle, para enseguida desconectarse , pero no se sala SQL*Plus.
EDIT Invoca al Editor de texto del sistema operativo
EXECUTE Ejecuta una sentencia de PL/SQL
EXIT Termina la session de SQL *Plus y retorna al control del sistema Operativo.
GET Carga un archivo del sistema operativo en el buffer de SQL
HELP Ayuda de SQL *Plus
HOST Ejecuta un comando del sistema operativo sin dejar SQL*Plus.
INPUT Agrega una o mas líneas después del final de la línea
LIST Lista una o mas líneas de SQL buffer
Exhibe una línea vacía seguida por una línea que contiene el texto,
PAUSE
después espera el usuario para presionar [ return ].
PRINT Despliega el valor actual de la variable
PROMPT Despliega un mensaje especifico o un línea en blanco en la pantalla
REMARK Comienza con un comentario en la linea de comandos
REPFOOTER Lugar y Formato del pie de página o lista la definición actual de REDFOOTER
Lugar y formato de un titulo especificado en el informe o lista la definición actual de
REPHEADER
REPHEADER
RUN Ejecuta un serie de commandos de SQL o un bloque de PL/SQL
RUNFORM Invoca a la aplicación SQL *Forms desde SQL *Plus
SAVE Guarda el contenido de SQL buffer en un archivo del sistema operativo
SET Variable SETs que modifican el ambiente de trabajo de SQL *Plus para cada sesión
SHOW Muestra el valor actual de la variable de SQL *Plus o de una variable de ambiente
Almacena a un archivo del sistema operativo y envía opcionalmente a la impresora o a
SPOOL
un archivo
SQLPLUS Empieza la session de SQL *Plus desde el prompt des sistema operativo.
START Ejecuta el contenido archivo de un comandos especifico.
Ahorra cualidades del ambiente actual del SQL*Plus en un archivo del sistema operativo
STORE
del anfitrión (un archivo de comando).
Registra los datos que miden el tiempo por un período del tiempo transcurrido, enumera
TIMING el título y los datos que miden el tiempo del contador de tiempo actual, o enumera el
número de contadores de tiempo activos.
Especifica el lugar y formato de un titulo para cada página del reporte o lista la
TTITLE
definición de TTITLE.
UNDEFINE Elimina una o mas variables de usuario que se definieron anteriormente (con el comando
DEFINE) o implícitamente
VARIABLE Declara una variable que puede ser referenciada en PL/SQL
WHENEVER
Sale de SQL*Plus si un comando del sistema operativo genera un error.
OSERROR
WHENEVER
Sale de SQL *Plus si un comando de SQL o un bloque de PL/SQL genera un erros
SQLERROR

Límites SQL*PLUS
Concepto Limite
Longitud de filename Depende del sistema
Longitud de username 30 bytes
Longitud del nombre de una variable de usuario. 30 bytes
Longitud del valor de una variable de usuario 240 characters
Longitud de una línea de comando 2500 characters
Longitud de un valor LONG SQL*Plus LINESIZE value
LINESIZE Depende del sistema
LONGCHUNKSIZE value (requires Oracle7) MAXDATA value
MAXDATA value Depende del sistema
Tamaño de una línea de salida Depende del sistema
Tamaño de una línea después de una variable de
3,000 characters (solo interno)
sustitución
Número de caracteres en una etiqueta del comando
500 characters
COMPUTE
Número de líneas para un comandos de SQL 500 (asumiendo 80 characters por líena)
Máximo de PAGESIZE 50,000 líneas
Total de una fila 60,000 caractéres para VMS; o, 32,767 characters
Máximo de ARRAYSIZE 5000 filas
Máximo número de filas de comandos. 20 for VMS, CMS, Unix; otherwise, 5
Máximo número de páginas 99,999
Máximo tamaño de mensajes de error PL/SQL 2K (Oracle7) 512 Bytes (Oracle Version 6)
Longitud Máxima de Caracteres en el comando 240 Bytes

Bibliografía
Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.
Práctica 8: Producir impresiones legibles con SQL *PLUS

Determine whether the following statements are trae or false:

1. A single ampersand substitution variable prompts at most once.


True / False

2. The ACCEPT command is a SQL command.


True / False

3. Write a script file to display the employee name, job, and hire date for all employees
who started between a give range. Concatenate the name job together, separated by
a space and comma, and label the column Employees. Prompt the user for the two
ranges using the ACCEPT command. Use the format MM/DD/YYYY. Save the
script file as p8q3.sql.

Please enter the low date range ( ´MM/DD/YYYY ´ ): 01/01/1981


Please enter the high date range ( ´MM/DD/YYYY ´ ): 01/01/1982

EMPLOYEES HIREDATE
--------------------- ---------
ALLEN, SALESMAN 20-FEB-81
WARD, SALESMAN 22-FEB-81
JONES, MANAGER 02-ABR-81
MARTIN, SALESMAN 28-SEP-81
BLAKE, MANAGER 01-MAY-81
CLARK, MANAGER 09-JUN-81
KING, PRESIDENT 17-NOV-81
TURNER, SALESMAN 08-SEP-81
JAMES, CLERK 03-DIC-81
FORD, ANALYST 03-DIC-81

10 rows selected.

4. Write a script to display the employee name, job, and department name for a given
location. The search condition should allow for case-insensitive searches of the
department location. Save the script file as p8q4.sql.

Please enter the location name : DALLAS

EMPLOYEE N JOB DEPARTMENT NAM


---------- --------- --------------
SMITH CLERK RESEARCH
JONES MANAGER RESEARCH
SCOTT ANALYST RESEARCH
ADAMS CLERK RESEARCH
FORD ANALYST RESEARCH

5. Modify p8q4.sql to create a report containing the department name, employee


name, hire date, salary, and each emplooyee´s annual for all employees in a given
location. Prompt the user for the location. Label the columns DEPARTMENT
NAME, EMPLOYEE NAME, START DATE, SALARY, and ANNUAL SALARY,
placing the labels on multiple lines. Resave the script as p8q5.sql.

Please enter the location name : Chicago

DEPARTMENT EMPLOYEE START SALARY ANNUAL


DATE SALARY
----------- --------- --------- ---------- -----------
SALES BLAKE 01-MAY-81 2,850.00 34,200.00
MARTIN 28-SEP-81 1,250.00 15,000.00
ALLEN 20-FEB-81 1,600.00 19,200.00
TURNER 08-SEP-81 1,500.00 18,000.00
JAMES 03-DEC-81 950.00 11,400.00
WARD 22-FEB-81 1,250.00 15,000.00
Unidad 9 Manipular datos
Objetivo: El alumno será capaz de manejar los estatutos
DML, insertar, borrar y modificar registros, controlar
transacciones.

Sugerencias didácticas
Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de
dificultad y con base en cada una de las instrucciones que los componen, enseñar la sintaxis
del lenguaje y la finalidad de cada una de ellas.
Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.
Solicitarle la elaboración de programas similares, agregándoles algunas variantes.
Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.
Sugerencias de evaluación
El docente deberá considerar la evaluación, no solo como un medio de medir el
aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje,
además de los exámenes tradicionales se recomienda se tome en cuenta: participación en
clases, elaboración de prácticas en el laboratorio y proyectos.

Lenguaje de manipulación de datos


La manipulación de datos se refiere a las operaciones de insertar, recuperar, eliminar o
modificar datos; dichas operaciones son realizadas a través del lenguaje de manipulación de
datos (DML, Data Manipulation Language), que es quién permite el acceso de los usuarios
a los datos, el DML tiene dos perspectivas:
o Proposiciones integradas.- Son una serie de instrucciones contenidas en un
programa.
o Consulta (Query).- Son consultas rápidas a una BD.
Para ambas se requiere un lenguaje de programación. Entonces, el DBMS se convierte en
un intermediario entre el usuario y la BD almacenada, entonces, a través de un programa o
una consulta podemos extraer información. Siendo formales, el DBMS es un elemento de
software que especifica la forma en que los datos pueden estructurarse. Controla todos los
accesos a dichos datos y proporciona algunos otros servicios aplicados a las BD, como
seguridad, sistema de respaldos, etc.
Insertar registros en una tabla
Sintaxis
INSERT INTO nombre_tabla [ (col1,col2,.....)]
VALUES (value1,value2,.....)
Ejemplo
Desplegar la estructura de la tabla PAISES
SQL> describe paises
Name Null? Type
------------------------------- --------- ----------
CODIGO NOT NULL NUMBER(5)
NACION NOT NULL CHAR(28)
CAPITAL CHAR(20)
AREA NUMBER(22)
POBLACION NUMBER(22)

Insertar valores para el país llamado RUSIA en la tabla países


SQL> insert into paises
2 values (200,'Rusia','Moscu',5E+06,1.1E+08);

1 row created

Insertar valores solo en algunas columnas


Ejemplo:
SQL> insert into paises(nacion,capital,area)
2 values ('Ucrania','Kiev',2.5E+06);

1 row created

Insertar valores en columnas usando parametros


Ejemplo
SQL> insert into paises
2 values(&codigo,'&nacion','&capital',&area,&poblacion);
Enter value for codigo: 250
Enter value for nacion: Croacia
Enter value for capital: Zagreb
Enter value for area: 45000
Enter value for poblacion: 950000
old 2: values(&codigo,'&nacion','&capital',&area,&poblacion)
new 2: values(250,'Kroacia','Sagreb',45000,950000)

1 row created.

Formateo del despliegue de fechas con la función TO_DATE


Ejemplo:
Insertar un empleado en la tabla EMP. Convierte el string de fecha en un formato Oracle.
SQL> INSERT INTO emp(empno,ename,hiredate,deptno)
2 VALUES (7999,'SAMS',
3 TO_DATE('070391083000','MMDDYYHHMISS'),10);

1 row created.
SQL> SELECT ename, hiredate
2 FROM emp
3 WHERE empno=7999;

RENAME HIREDATE
---------- ---------
SAMS 03-JUL-91

Modificación de datos
Cambia datos de una tabla especificada con la sentencia UPDATE
Sintaxis
UPDATE nombre_tabla
SET colum1=valor,colum2=valor.....
[WHERE condición]
Ejemplo:
Cambiar en la tabla PAIS_LIMITE , todos los registros , que tengan el campo NORTE = *
por NORTE = X
SQL> update pais_limite
2 set norte='X'
3 where norte='*';

143 rows updated.

SQL> select nacion_codigo,norte


2 from pais_limite
3 where norte<>' ';

Eliminación de filas
Se pueden eliminar filas de una tabla especificada usando la sentencia DELETE
Sintaxis
DELETE FROM nombre_tabla
WHERE condición
Ejemplo: De aquí eliminamos el registro cuyo código es 250
SQL> delete from paises
2 where codigo=250;

1 row deleted.
SQL> DELETE FROM emp
2 WHERE empno=7999;

1 row deleted.

Transacciones
Una transacción es definida como todos los cambios hechos en una base de datos entre
sucesivos “COMMIT”
COMMIT
INSERT
INSERT
DELETE
INSERT
UPDATE
UPDATE
COMMIT
Proceso de transacciones
La sentencia COMMIT hace permanente todos los cambios desarrollados durante una
transacción.
Tipos de COMMIT
o EXPLICITO
o IMPLICITO
Ejemplo
SQL> delete from paises
2 where codigo=250;

1 row deleted.

SQL> COMMIT ;
Commit complete.

Una transacción puede ser interrumpida y deshecha hasta el anterior Commit a través de la
sentencia Rollback.
COMMIT
INSERT
INSERT
DELETE
ROLLBACK
INSERT
UPDATE
UPDATE
COMMIT
La sentencia ROLLBACK hace que el trabajo realizado en la actual transacción sea
deshecho
Ejemplo
Transferir al empleado ‘JONES’ al grupo de vendedores
SQL> UPDATE empleados
2 set trabajo=’VENDEDOR’, depno=30
3 where nombre=’JONES’ ;

1 row updated

Todos los empleados cuyo apellidos sea Jones ha sido transferido. Con la sentencia
ROLLBACK podemos deshacer la transferencia y corregirla.
SQL> ROLLBACK ;
Rollback complete.

SQL> UPDATE empleados


2 set trabajo=’VENDEDOR’, depno=30
3 where nro_empleado= 7566 ;

1 row updated

La sentencia Savepoint permite tener marcas dentro de una transacción


ROLLBACK
INSERT
DELETE
----------- SAVEPOINT MARCA A
UPDATE
----------- SAVEPOINT MARCA B
UPDATE
UPDATE
COMMIT
Se pueden marcar puntos dentro de una transacción particular dentro de los cuales se puede
realizar ROLLBACK, sin hacerlo para toda la transacción
Ejemplo
Insertar un nuevo departamento en la tabla deptos y crear un SAVEPOINT para la
transacción.
SQL> INSERT INTO deptos
2 VALUES (70,´PERSONAL’,´TAHITI’) ;
1 row created.

SQL> SAVEPOINT A ;
savepoint created.

Uso de sentencia ROLLBACK para deshacer justo un punto de la transacción (tras el


llamado savepoint)
Ejemplo
Insertar un nuevo departamento en la tabla deptos y crear un SAVEPOINT para la
transacción
SQL> INSERT INTO deptos
2 VALUES (80,´EDUCATION’,´MAUI’) ;

1 row created.

SQL> SAVEPOINT B;
savepoint created.

Cambiar la ubicación del departamento 80 a KAUAI


SQL> UPDATE deptos
2 SET LOC=’KAUAI’
3 WHERE DEPNO= 80 ;

1 row updated.

Deshacer la transacción
SQL> ROLLBACK to B ;
Rollback complete.

Bibliografía
Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.
Práctica 9: Manipular datos

Insert data into the MY_EMPLOYEE table.

1. Run the lab9_1.sql to build the MY_EMPLOYEE table that will be used for the
lab.

2. Describe the structure of the MY_EMPLOYEE table to identify the column names.

Name Null? Type


------------------ ------------ -------------------
ID NOT NULL NUMBER(4)
LAST_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
USERID VARCHAR2(8)
SALARY NUMBER(9,2)

3. Add the first row of data to the MY_EMPLOYEE table from the following sample
data. Do not list the column in the INSERT clause.

ID LAST_NAME FIRST_NAME USERID SALARY


1 Patel Ralph Rpatel 795
2 Dancs Betty Bdancs 860
3 Biri Ben Bbiri 1100
4 Newman Chad Cnewman 750
5 Ropeburn Audry Aropebur 1550

4. Populate the MY_EMPLOYEE table with the second row of the sample data from
the preceding list. This time, list the columns explicitly in the INSERT clause.

Confirm your addition to the table.

ID LAST_NAME FIRST_NAME USERID SALARY


--- ------------- ------------ ------- -----------
1 Patel Ralph rpatel 795
2 Dancs Betty bdancs 860

5. Create a script named loademp.sql to load rows into the MY_EMPLOYEE table
interactively. Prompt the user for the employee’s id, first name, last name and
salary. Concatenate the first letter of the first name and the first seven characters of
the last name to produce the user id.
6. Populate the table with the next two rows of the sample data by running the script
that you created.

7. Confirm your additions to the table.

ID LAST_NAME FIRST_NAME USERID SALARY


--- ------------- ------------ ------- -----------
1 Patel Ralph rpatel 795
2 Dancs Betty bdancs 860
3 Biri Ben bbiri 1100
4 Newman Chad cnewman 750

8. Make the data additions permanent. Update and delete data in the
MY_EMPLOYEE table.

9. Change the last name of employee 3 to Drexler.

10. Change the salary to 1000 for all employees with a salary less than 900.

11. Verify your changes to the table.

LAST_NAME SALARY
--------------- ---------
Patel 1000
Dancs 1000
Drexler 1100
Newman 1000

12. Delete Betty Dancs from the MY_EMPLOYEE table.

13. Confirm your changes to the table.

ID LAST_NAME FIRST_NAME USERID SALARY


--- ------------- ------------ ------- -----------
1 Patel Ralph rpatel 1000
3 Biri Ben bbiri 1100
4 Newman Chad cnewman 1000

14. Commit all pending changes. Control data transaction to the MY_EMPLOYEE
table.

15. Populate the table with the last row of sample data by running the script that you
created in step 6.

16. Confirm your addition to the table

ID LAST_NAME FIRST_NAME USERID SALARY


--- ------------- ------------ ------- -----------
1 Patel Ralph rpatel 1000
3 Drexler Ben bbiri 1100
4 Newman Chad cnewman 1000
5 Ropeburn Audry aropebur 1550

17. Mark an intermediate point in the processing of the transaction.

18. Empty the entire table.

19. Confirm that the table is empty.

20. Discard the most recent DELETE operation without discarding the earlier INSERT
operation.

21. Confirm that the new row is still intact.

ID LAST_NAME FIRST_NAME USERID SALARY


--- ------------- ------------ ------- -----------
1 Patel Ralph rpatel 1000
3 Drexler Ben bbiri 1100
4 Newman Chad cnewman 1000
5 Ropeburn Audry ropebur 1550

22. Make the data addition permanent


Unidad 10 Crear Tablas
Objetivo: El alumno será capaz de
manejar tablas, crear una tabla, describir
tipos de datos, alterar, borrar, renombrar
una tabla.

Sugerencias didácticas
Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de
dificultad y con base en cada una de las instrucciones que los componen, enseñar la sintaxis
del lenguaje y la finalidad de cada una de ellas.
Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.
Solicitarle la elaboración de programas similares, agregándoles algunas variantes.
Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.
Sugerencias de evaluación
El docente deberá considerar la evaluación, no solo como un medio de medir el
aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje,
además de los exámenes tradicionales se recomienda se tome en cuenta: participación en
clases, elaboración de prácticas en el laboratorio y proyectos.

Tablas
Las tablas pueden ser creadas en cualquier momento siempre que los usuarios estén
conectados a la base de datos.
No es necesario especificar el tamaño de un a tabla, el tamaño es definido en última
estancia por el total de espacio de la de base de datos como un todo.
Las tablas pueden ser modificadas en línea.
Reglas de definición de nombres de tablas
Es necesario nombrar las tablas de la base de datos de acuerdo con el estándar para nombrar
objetos de la base de datos:
Los nombres de tablas y columnas, deberán de empezar con una letra y pueden tener 30
caracteres de longitud, aunque no es recomendable llegar hasta el límite.
Los nombres deben de contener solo los caracteres A-Z, a-z, 0-9, _, $ y #.
Los nombres no deben tener el nombre de otro objeto del cuál sea propietario el mismo
usuario del servidor de Oracle, cualesquiera que este sea.
Los nombres no deben de ser una palabra reservada del servidor de Oracle.
Se deben de usar nombres descriptivos para las tablas y otros objetos.
Nombre la misma entidad consistentemente en diferentes tablas, por ejemplo, la columna
de número de departamento es llamada DEPTNO en ambas tablas, EMP y DEPT.
Los nombres son case-sensitive.
Sentencia CREATE TABLE
Esta es un a sentencia que perteneces a las sentencias de lenguaje de definición de datos
(DDL Data Definition Language), este grupo de sentencias, se usan para crear, modificar o
remover objetos de la base de datos de Oracle. Estas sentencias tienen un efecto inmediato
en la base de datos y también puede guardar información en el, diccionario de datos
Para crear una tabla, el usuario deberá de poseer el privilegio de CREATE TABLE y un
área de almacenamiento en la cuál pueda crear objetos. El administrador de la base de datos
(DBA) usa sentencias de lenguaje de control de datos (DCL Data Control Language) para
otorgar privilegios a los usuarios.
La sintaxis de la sentencia es la siguiente:
CREATE [GLOBAL TEMPORARY] TABLE [schema. ] table
( column datatype [DEFAULT expr ][,….]);
En dónde:
GLOBAL TEMPORARY. Especifica que se trata de una tabla temporal y esta es una
definición visible para todas las sesiones, el dato en una tabla
temporal es visible solo en la sesión que inserta el dato en la
tabla.
schema. Es lo mismo que el nombre del dueño o propietario de la
tabla.
DEFAULT expr. Especifica un valor por default si el valor es omitido en la
sentencia de INSERT.
column. Es el nombre de la columna
datatype. Es el tipo de dato y longitud de la columna .
Haciendo referencia a otros usuarios de tablas
Un esquema es una colección de objetos, los objetos de un esquema son las estructuras
lógicas que refieren directamente a los datos en la base de datos. Los objetos del esquema,
incluyen a las tablas, vistas, sinónimos, secuencias, procedimientos almacenados, índices,
clusters y links de la base de datos.
Si la tabla no corresponde al usuario, el nombre del usuario, puede estar prefijado para la
tabla.
DEFAULT OPTION
Se le puede dar a una columna un valor por default usando la opción DEFAULT , la cuál
previene valores nulos en una columna de una tabla si el registro es insertado sin un valor
para esa columna. El valor por default puede ser una literal, una expresión o una función
SQL como SYSDATE o USER, pero el valor no puede ser el nombre de otra columna o
una pseudo columna, como NEXTVAL o CURVAL, la expresión de default, debe
corresponder al tipo de dato de la columna.
CREATE TABLE
El siguiente ejemplo crea la tabla CLIENTES con cinco columnas, llamadas: Código,
Fecha, Nombre, Teléfono y Dirección,
CREATE TABLE CLIENTES
(
CODIGO INTEGER,
FECHA DATE,
NOMBRE VARCHAR2(30),
TELEFONO VARCHAR2(20) NOT NULL,
DIRECCION VARCHAR2(100
);

Dado que la tabla es un comando DDL, un COMMIT automático se realiza cuando la


sentencia se ejecuta.
Tablas de la base de datos de Oracle
Las tablas de usuario, son tablas creadas por el usuario, como la tabla EMP. Hay otra
colección de tablas o vistas en la base de datos de Oracle conocidas como “Diccionario de
Datos”. Esta colección es creada y mantenida por el servidor de Oracle y contiene
información acerca de la base de datos.
Todas las tablas del diccionario de datos son propiedad del usuario SYS. Las tablas base,
raramente son usadas por el usuario, por que la información en ellas no es fácil de entender.
Por lo tanto, los usuarios, típicamente acceden las vistas del diccionario de datos, por que la
información se presenta en un formato sencillo de entender.
La información almacenada en el diccionario de datos incluye nombres de los usuarios del
servidor de Oracle, privilegios otorgados a los usuarios, nombres de los objetos de la base
de datos, restricciones de tablas, y más información útil para auditar la base de datos.
Existen cuatro categorías de vistas del diccionario de datos, cada categoría tiene un prefijo
diferente el cuál refleja la intención de uso.
PREFIJO DESCRIPCION
USER_ Estas vistas contienen información acerca de los objetos que son propiedad del usuario.
ALL_ Estas vistas contienen información acerca de todas las tablas (tablas de objetos y tablas
relacionales) accesibles para el usuario.
DBA_ Estas vistas son vistas restringidas y solo pueden ser accedidas por personas que tienen
asignado un Rol de DBA.
VS_ Estas vistas contienen información acerca del funcionamiento de vistas dinámicas, del
funcionamiento del servidor de Oracle y seguridad.
Consultando el diccionario de datos
Es posible consultar las tablas del diccionario de la base de dato para ver varios objetos de
la base de datos que son propiedad del usuario de la sesión. Las tablas de diccionario de
datos más comúnmente usadas son:
USER_TABLES
USER_OBJECTS
USER_CATALOG

Tipos de datos
Existen los siguientes tipos de datos en Oracle :
Tipo de Dato Descripción
VARCHAR2 (size) Caracter de longitud variable (Un tamaño de valor máximo debe de ser
especificado en size, El valor por default de size y mínimo es 1, y el
máximo es 4000)
CHAR (size) Caracter de longitud fija de tamaño en bytes (El valor por default de
size y mínimo es 1, y el máximo es 4000)
NUMBER (p,s) Numero con precisión y escala, dónde la precisión esta dada por el
número total de dígitos decimales y la escala es el número de dígitos a
la derecha del punto decimal, la precisión puede tener un rango de 1 a
38 y la escala puede tener un rango de -84 a 127
DATE Valores de hora y fecha entre el primero de enero del año 4712 antes de
cristo y el 31 de diciembre del año 9999 después de cristo
LONG Caracter de longitud variable de arriba de 2 gigabytes
CLOB Caracter single-byte de arriba de 4 gigabytes
RAW (size) Nuevo dato binario de tamaño size (Un máximo tamaño debe de ser
especificado, el tamaño máximo es 2000)
LONG RAW Nuevo dato binario de longitud variable arriba de 3 gigabytes
BLOB Dato binario de arriba de 4 gigabytes
BFILE Dato binario almacenado en un archivo externo arriba de 4 gigabytes

Creando una tabla usando una subconsulta


Un segundo método para crear tablas, es aplicando la cláusula AS subquery, que es útil para
crear una tabla y al mismo tiempo insertar registros en la misma a través de los registros
regresados por la sub consulta.
La sintaxis de la sentencia es la siguiente:
CREATE TABLE table
[(column, column….)]
AS subquery;
En dónde :
table. Es el nombre de la tabla.
column. Es el nombre de la columna , valor de default y restricciones.
subquery. Es la sentencia de SELECT que define el grupo de registros que será
insertado en la nueva tabla.

Observaciones
o La tabla será creada con los nombres de columna especificados y las columnas
obtenidas por la sentencia SELECT que serán insertadas en la nueva tabla.
o La definición de columna puede contener únicamente el nombre de columna y el
valor por default.
o Si hay especificaciones de columna dadas, el número de columnas, puede ser igual
al dado en la lista de la búsqueda del SELECT.
o Si no hay especificaciones de columna dadas, los nombres de columna de la tabla,
serán los mismos que los nombres de las columnas en el subquery.
El siguiente ejemplo crea la tabla DEPT30, que contiene detalles de todos los empleados
que trabajan en el departamento 30. Nótese que los datos para la tabla DEPT30 fueron
obtenidos de la tabla EMP.
CREATE TABLE DEPT30
AS
SELECT empno, ename, sal*12 ANNSAL, hiredate
FROM EMP
WHERE deptno = 30;

Sentencia ALTER TABLE


Después de crear tablas, es posible que se requiera cambiar su estructura, por haberse
omitido una columna o por que nuestra definición de columnas necesita ser modificada.
Nosotros podemos hacer esto usando el coman do ALTER TABLE.
La sintaxis de la sentencia es la siguiente:
ALTER TABLE table
ADD ( column datatype [DEFAULT expr ]
[, column datatype]…..);
ALTER TABLE table
MODIFY ( column datatype [DEFAULT expr ]
[, column datatype]…..);
En dónde:
table. Es el nombre de la tabla.
column. Es el nombre de la columna.
datatype. Es el tipo de dato y longitud de la columna .
DEFAULT expr. Especifica un valor por default para una nueva columna
Agregando una columna
Observaciones
o Es posible agregar y modificar columnas de una tabla, pero no es posible
eliminarlas
o No es posible indicar en que lugar deberá de ubicarse la columna en la tabla,
cualquier columna que sea agregada a una tabla será la última columna de la tabla.
Modificando una columna
Es posible modificar una definición de columna utilizando la sentencia ALTER TABLE
con la cláusula MODIFY, esta modificación puede incluir modificaciones al tipo de datos
de la columna, el tamaño y el valor por default.
Observaciones
o Incrementar la longitud o la precisión de una columna de tipo numérico.
o Decrementar la longitud de una columna que contenga solo valores nulos y si la
tabla no tiene registros
o Convertir una columna de tipo CHAR a una tipo VARCHAR2 o viceversa si la
columna contiene valores nulos o si no se quiere cambiar el tamaño.
o Un cambio en el valor de default de una columna afecta solamente a las nuevas
inserciones en la tabla.
Eliminando una columna
A partir de la versión 8i de Oracle y en adelante, nosotros podemos eliminar columnas de
una tabla utilizando la sentencia ALTER TABLE con la cláusula COLUMN, la sintaxis es:
ALTER TABLE table
DROP COLUMN column ;
En dónde:
table. Es el nombre de la tabla.
column. Es el nombre de la columna que deseamos eliminar.
Observaciones
o La columna a eliminar puede o no con tener datos.
o Solo una columna puede ser eliminada a la vez.
o La tabla deberá de mantener como mínimo una columna después de ser alterada
o Una vez que una columna es eliminada, esta no se puede recuperar.
Opción SET UNUSED
La opción SET UNUSED, marca una o más columnas de una tabla como no utilizadas,
entonces estas pueden ser eliminadas cuando el desempeño de la base de datos se vea
disminuido, la ayuda que ofrece esta opción, es que las columnas marcadas de esta manera
son tratadas como si hubieran sido desaparecidas con la cláusula DROP, aun que esto no
haya sucedido en realidad. Por lo tanto el tiempo de respuesta es más rápido que si se
hubiera ejecutado la cláusula DROP. Después de que una columna ha sido marcada como
no usada, no es posible acceder a esa columna, por lo que una sentencia SELECT no
regresara datos de columnas marcadas como no usadas. En adición, las columnas marcadas
como no usadas, no serán desplegadas durante un DESCRIBE y será posible agregar
columnas con el mismo nombre de una columna marcada como no usada.
Opción DROP UNUSED COLUMN
Esta sentencia elimina de la tabla aquellas columnas que están marcadas como no usadas,
podemos hacer uso de esta sentencia cuando requiramos del espacio en disco que están
ocupando columnas que no se están usando
DROP TABLE
Esta sentencia remueve la definición de una tabla de Oracle, cuando ejecuta esta sentencia
sobre una tabla, la base de datos pierde todos los datos en la tabla y todos los índices
asociados con ellos.
La sintaxis de la sentencia es la siguiente:
DROP TABLE table
En dónde:
table. Es el nombre de la tabla.
Observaciones
o Todos los datos son borrados de la tabal
o Cualquier vista o sinónimo puede permanecer, pero serán inválidos
o Cualquier transacción pendiente será registrada.
o Solo el usuario de la tabla o un usuario con el privilegio DROP ANY TABLE, puede
remover la tabla.
o Una vez ejecutada esta sentencia es irreversible, la base de datos no cuestiona la
acción, ya que si se es el propietario de la tabla, o se tiene privilegios de alto nivel,
la tabla es removida de manera inmediata.
o Todas las sentencias DDL, involucran un commit, por lo tanto la transacción se hace
permanente.
Sentencia RENAME
Sentencias adicionales DDL incluyen la sentencia RENAME, que es usada para renombrar
objetos de la base de datos de Oracle, tablas, vistas, secuencias o sinónimos.
La sintaxis de la sentencia es la siguiente:
RENAME old_name TO new_name
En dónde:
Old name . Es el nombre antiguo de la tabla, vista, secuencia o sinónimo.
New name . Es el nuevo nombre de la tabla, vista, secuencia o sinónimo.
Se debe de ser propietario del objeto que se va a renombrar.
Sentencia TRUNCATE
Otra sentencia DDL es la sentencia TRUNCATE, que es usada para remover todos los
registros de una tabla, y liberar el espacio de almacenamiento utilizado por esa tabla.
Cuando se usa esta sentencia no se puede hacer ningún rollback sobre los registros
removidos.
La sintaxis de la sentencia es la siguiente:
TRUNCATE TABLE table
En dónde:
table . Es el nombre de la tabla.
Se debe de ser propietario de la tabla o tener privilegios de sistema para truncar una tabla,
la sentencia DELETE también puede remover registros de una tabla, pero esto no libera
espacio de almacenamiento.
Sentencia COMMENT
Con esta sentencia, se puede agregar un comentario de más de 2,000 bytes sobre una
columna, tabla o vista. El comentario es almacenado en el diccionario de datos y puede ser
consultado en una de las siguientes vistas del diccionario de datos :
o All_COL_COMMENTS
o USER_COL_COMMENTS
o ALL_TAB_COMMENTS
o USER_TAB_COMMENTS
La sintaxis de la sentencia es la siguiente:
COMMENT ON TABLE table l COLUMN table.column IS ‘text’
En dónde:
table. Es el nombre de la tabla.
column . Es el nombre de la columna en la tabla.
Text . Es el texto del comentario.

Bibliografía
Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.
Práctica 10: Crear Tablas

1. Create the DEPARMENT table based on the following table instance chart. Enter
the syntax in a script called p10ql.sql, then execute the script to create the table.
Confirm that the table is created.

Column Name Id Name


Key type
Nulls/Unique
FK table
FK column
Datatype Number Varchar2
Length 7 25

Name Null? Type


----------- ------------ -----------
ID NUMBER(7)
NAME VARCHAR2(25)

2. Populate the DEPARTMENT tabled with data from the DEPT table. Include only
columns that you need.

3. Create the EMPLOYEE tabled based on the following table instance chart. Enter
the syntax in a script called p10q3.sql, and then execute the script to create the
table. Confirm that the table is created.

Column Name ID LAST_NAME FIRST_NAME DEPT_ID


Key Type
Nulls/Unique
FK table
FK column
Datatype Number Varchar2 Varchar2 Number
Length 7 25 25 7

Name Null? Type


----------- ------------ -----------
ID NUMBER(7)
LAST_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
DEPT_ID NUMBER(7)

4. Modify the EMPLOYEE table to allow for longer employee last name. Confirm
your modification.

Name Null? Type


----------- ------------ -----------
ID NUMBER(7)
LAST_NAME VARCHAR2(50)
FIRST_NAME VARCHAR2(25)
DEPT_ID NUMBER(7)

5. Confirm that both the DEPARTMENT and EMPLOYEE tables are stored in the
data dictionary.(Hint: USER_TABLES).

TABLE_NAME
-------------------------------------
DEPARTMENT
EMPLOYEE

6. Create the EMPLOYYEE2 table based on the structure of the EMP table. Include
only the EMPNO, ENAME, and DEPTNO columns. Name the columns in your
new table ID, LAST_NAME, and DEPT_ID, respectively.

7. drop the EMPLOYEE table.

8. Rename the EMPLOYEE2 table to EMPLOYEE.

9. Add a comment to the DEPARTMENT and EMPLOYEE table definitions


describing the tables. Confirm your additions in the data dictionary.

10. Drop the LAST_NAME column from the EMPLOYEE table. Confirm your
modification by checking the description of the table.

11. Create the EMPLOYEE2 tabled based on the structure of the EMP table. Include
only the EMPNO, ENAME, and DEPTNO columns. Name the columns in your
new table ID, LAST_NAME, and DEPT_ID, respectively. Mark the DEPT_ID
column in the EMPLOYEE2 table as UNUSED. Confirm your modification by
checking the description of the table.

12. Drop all the UNUSED columns from he EMPLOYEE2 table. Confirm your
modification by checking the description of the table.

S-ar putea să vă placă și