Você está na página 1de 30

Posibilidades de Edicin

SQL*Plus almacena en un buffer la ltima sentencia SQL introducida. El buffer mantiene slo 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 tambin nos permite editar la sentencia SQL alamacenada en el buffer mediante un sencillo
(y limitado) editor en lnea, cuyos comandos se enumeran a continuacin:
Comando Abreviatura Descripcin
APPEND texto A texto Aade texto al final de la lnea.
CHANGE/fuente/destino C/fuente/destino Cambia el contenido 'fuente' por el 'destino'
CHANGE/texto C/texto Quita 'texto' de una lnea.
CLEAR BUFFER CL BUFF Borra el buffer
DEL DEL Borra una lnea.
INPUT I Inserta una o ms lneas.
INPUT texto I texto Inserta una lnea con 'texto'.
LIST L Lista las lneas del buffer
LIST n L n n Lista la lnea n-sima.
LIST * L * Lista la lnea actual.
LIST LAST L LAST Lista la ltima lnea.
LIST m n L m n Lista las lneas desde la m-sima a la n-sima.
Al contenido del buffer tambin 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
3.3 Utilizacin de Ficheros
SQL*Plus considera dos tipos de ficheros: de spool y de comandos.
Un fichero de spool almacena los resultados de una consulta (o varias) en un fichero con la extensin
.lst (o lo manda a la impresora).
Los comandos asociados con los ficheros spool son
SPOOL fichero
Manda el resultado de las consultas al fichero.
SPOOL OUT
Manda el resultado de las consultas a la impresora.
SPOOL OFF
Cierra el fichero de spool.
EXIT
Al salir de SQL*Plus se cierran los ficheros de spool.
Los archivos de comandos almacenan comandos SQL y SQL*Plus para ser editado, almacenado y/o
ejecutado; y tienen por defecto la extensin .sql :
Para editarlo se puede utilizar el comando edit fichero.
Para ejecutarlo se utilizar el comando START fichero o @fichero
El SQL*Plus nos proporciona ms posibilidades en relacin con los ficheros de comandos, la
comunicacin con el usuario final y la generacin de informes. Pero antes de ver este tipo de cosas, es
mejor que sigamos profundizando en el conocimiento del lenguaje SQL. Al final del curso se puede se
encuentra un captulo con algunas de las cosillas que quedan por contar del SQL*Plus.
4 Creacin
La primera fase de cualquier base de datos comienza siempre con sentencias DDL, ya que antes de
poder almacenar informacin debemos definir los objetos bsicos donde agrupar la informacin. Los
objetos bsicos con que trabaja SQL son las tablas. Una tabla es un conjunto de celdas agrupadas en
filas y columnas donde se almacenan elementos de informacin.
Antes de llevar a cabo la creacin de una tabla conviene planificar:
nombre de la tabla,
nombre de cada columna,
tipo y tamao de los datos almacenados en cada columna,
informacin adicional, restricciones, etc.
Hay que tener en cuenta tambin ciertas restricciones en la formacin de los nombres de las tablas:
longitud mxima de 30 caracteres, no puede haber nombres de tabla duplicados, deben comenzar con
un carcter alfabtico, permitir caracteres alfanumricos y el guin bajo '_', y Oracle no distingue entre
maysculas y minsculas.
La sintaxis del comando que permite crear un tabla es la siguiente:
CREATE TABLE [esquema.]taba !"#oumna ti$oCoumna [%&T %'LL]()
*
(
"C&%STRA+%T nombreRestri##i,n
"'%+Q'E ![#oumn(]
*
-.
/E0A'LT e1$resion.
C2EC3 !#ondi#ion-.
4R+5AR6 3E6 ![#oumn(]
*
-.
0&RE+7% 3E6 !#oumn- RE0ERE%CES taba!#oumna-)()
8
-
Del examen de la sintaxis de la sentencia Create Table se pueden concluir que necesitamos
conocer los distintos tipos de columna y las distintas restricciones que se pueden imponer al contenido
de las columnas. Vayamos por partes.
4.1 Tipos de Columnas
Existen varios tipos de datos en SQL. De esta manera, cada columna puede albergar una informacin
de naturaleza distinta. Los tipos de datos ms comunes y sus caractersticas se resumen en la siguiente
tabla.
Tipo de Dato Descripcin
ARC!AR"#ta$a
%o&
Almacena datos de tipo carcter alfanumrico de longitud variable, con
un tamao mximo de 2.000.
C!AR#ta$a%o&
Almacena datos de tipo carcter alfanumrico de longitud fija, con un
tamao mximo de 255.
LON'
Almacena datos de tipo carcter alfanumrico de longitud variable con
un tamao mximo de hasta 2 Gb.
NU()ER#di*+de
c&
Almacena datos numricos de di* dgitos, de los cuales dec son
decimales. El tamao mximo es de 38 dgitos.
DATE Almacena fechas desde el 1-Ene-4712 AC hasta el 31-Dic-4712 DC.
RA,#ta$a%o&
Almacena datos de longitud variable, con un tamao mximo de 255
bytes.
LON' RA, Almacena datos de longitud variable, con un tamao mximo de 2 Gb.
4.2 Restricciones
Las restricciones de los datos se imponen para asegurarnos que los datos cumplen con una serie de
condiciones predefinidas para cada tabla. Estas restricciones ayudan a conseguir la integridad de
referencia: todas las referencias dentro de una BD son vlidas y todas las restricciones se han cumplido.
Las restricciones se van a definir acompaadas por un nombre, lo que permitir activarlas o
desactivarlas segn sea el caso; o tambin mezcladas en la definiciones de las columnas de la tabla. A
continuacin vamos a describir cada una de las restricciones mencionadas.
NOT NULL
Establece la obligatoriedad de que esta columna tenga un valor no nulo. Se debe especificar junto
a la columna a la que afecta. Los valores nulos no ocupan espacio, y son distintos a 0 y al espacio
en blanco. Hay que tener cuidado con los valores nulos en las operaciones, ya que - . NULL es
igual a NULL.
UNI/UE
Evita valores repetidos en una columna, admitiendo valores nulos. Oracle crea un ndice
automticamente cuando se habilita esta restriccin y lo borra al deshabilitarse.
DEFAULT
Establece un valor por defecto para esa columna, si no se le asigna ninguno.
C!EC0
Comprueba que se cumpla una condicin determinada al rellenar esa columna. Esta condicin
slo debe estar construida con columnas de esta misma tabla.
PRI(AR1 0E1
Establece el conjunto de columnas que forman la clave primaria de esa tabla. Se comporta como
nica y obligatoria sin necesidad de explicitarlo. Slo puede existir una clave primaria por tabla.
Puede ser referenciada como clave ajena por otras tablas. Crea un ndice automticamente cuando
se habilita o se crea esta restriccin. En Oracle, los ndices son construidos sobre rboles B
+
.
FOREI'N 0E1
Establece que el contenido de esta columna ser uno de los valores contenidos en una columna de
otra tabla maestra. Esta columna marcada como clave ajena puede ser NULL. No hay lmite en el
nmero de claves ajenas. La clave ajena puede ser otra columna de la misma tabla. Se puede
forzar que cuando una fila de la tabla maestra sea borrada, todas las filas de la tabla detalle cuya
clave ajena coincida con la clave borrada se borren tambin. Esto se consigue aadiendo la
coletilla ON DELETE CASCADE en la definicin de la clave ajena.
Seguidamente se presenta un ejemplo en el que se crean dos tablas, una de departamentos y otra de
empleados:
RE5
RE5 taba de$artamento #on un #,di9o de de$artamento( un nombre
: una
RE5 o#ai;a#i,n.
RE5
#reate tabe de$ !
#od_de$ number!<-(
nombre var#=ar>!?@- not nu(
o# var#=ar>!?A-(
#onstraint de$_$B $rimar: Be: !#od_de$-(
#onstraint de$_o# #=e#B
!o# in !CDaadoidC( CBoe#ioC( CCi9aesC--
-E
RE5
RE5 taba em$eado #on un #,di9o de em$eado( un nombre( un
ofi#io( un
RE5 Fefe( una fe#=a de ata en a em$resa( un saario mensua( una
RE5 #omisi,n : e #,di9o de de$artamento donde trabaFa.
RE5
#reate tabe em$ !
#od_em$ number!<-(
nombre var#=ar>!?A- not nu(
ofi#io var#=ar>!??-(
Fefe number!<-(
fe#=a_ata date(
saario number!?A-(
#omision number!?A-(
#od_de$ number!<-(
#onstraint em$_$B $rimar: Be: !#od_em$-(
#onstraint em$_fB forei9n Be: !#od_de$- referen#es de$!#od_de$-
on deete #as#ade(
#onstraint em$_#B #=e#B !saario > A-
-E
4.3 Comando Describe
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
segn nos alejemos del momento de creacin de una tabla.
La sintsis es la siguiente
/ESCR+BE taba
Y un ejemplo de su utilizacin se puede ver al describir la definicin de las dos tablas creadas antes.
Como no es una sentencia SQL no necesita el ';' al final. Tambin se puede abreviar como DESC.
SQL> des#ribe de$
%ame %uG T:$e
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHH HHHH
C&/_/E4 %&T %'LL %'5BER!<-
%&5BRE %&T %'LL DARC2AR>!?@-
L&C DARC2AR>!?A-
SQL> des# em$
%ame %uG T:$e
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHH HHHH
C&/_E54 %&T %'LL %'5BER!I-
%&5BRE %&T %'LL DARC2AR>!?A-
&0+C+& DARC2AR>!?A-
JE0E %'5BER!I-
0EC2A_ALTA /ATE
SALAR+& %'5BER!?A-
C&5+S+&% %'5BER!?A-
C&/_/E4 %'5BER!<-
!odi"icacin
Despus de crear una tabla, a veces nos encontramos con que se necesita aadir una columna adicional
o modificar la definicin de una columna existente. Esta operacin se puede realizar con el comando
ALTER TA)LE.
ALTER TABLE taba "A// . 5&/+06) !"#oumna ti$oCoumna [%&T
%'LL]()
*
-E
Hay que tener en cuenta varios puntos:
No es posible disminuir el tamao de un columna.
En las modificaciones, los tipos anterior y nuevo deben ser compatibles, o la tabla debe estar
vaca.
La opcin ADD 222 NOT NULL slo ser posible si la tabla est vaca.
La opcin (ODIF1 222 NOT NULL slo podr realizarse cuando la tabla no contenga
ninguna fila con valor nulo en la columna en cuestin.
Por ejemplo la sentencia siguiente aade la fecha de nacimiento a la tabla de empleados.
SQL> ater tabe em$ add !fe#=a_na# date not nu-E
Tambin se puede querer modificar una tabla aadiendo o eliminando restricciones. En este caso el
comando a utilizar ser
ALTER TABLE taba "A// . /R&4) C&%STRA+%T restri##i,nE
# $nsercin% &ctualizacin ' (orrado
Una vez que tenemos definida la estructura de una tabla se pueden insertan los datos, modificarlos o
borrarlos de la tabla.
Esta tarea entra dentro de las operaciones que se realizan con el lenguaje DML. Este lenguaje permite
manipular los objetos de la base de datos, insertando, modificando y/o borrando el contenido de las
tablas. Hay que recordar que estas sentencias no son 'autoconfirmadas' y requieren de la sentencia
CO((IT para que sus efectos perduren en el tiempo, o de la sentencia ROLL)AC0 para deshacer los
cambios efectuados.
A continuacin vamos a estudiar tres de las sentencias DML ms comunes.
#.1 $nsercin
El comando que permite insertar filas en las tablas es el siguiente.
+%SERT +%T& taba [!"#oumna()
8
-] DAL'ES !"e1$resi,n()
*
-E
Slo especificaremos las columnas donde insertar y su orden cuando no insertemos datos en todas ellas
o no lo hagamos en el mismo orden en que definimos la tabla. La asociacin columna-valor es
posicional. Los valores deben cumplir con los tipos de datos definidos. Los valores de tipo caracter y
fecha deben ir encerrados entre comillas simples, ('').
A continuacin se puede ver la insercin de filas en las tablas de ejemplo.
RE5 insertar fias en a taba de$
insert into de$ vaues !?AA(CAdministra#ionC(CDaadoidC-E
insert into de$ vaues !>AA(C+*/C(CBoe#ioC-E
insert into de$ vaues !<AA(C4rodu##ionC(CCi9aesC-E
RE5 insertar fias en a taba em$
insert into em$ vaues
!?A?(CCanoC(C4residenteC(nu(C<H0EBHKLC(I@AAAA(nu(?AA-E
insert into em$ vaues
!?A>(CRon#aC(C/ire#torC(?A?(C<H0EBHKLC(<@AAAA(nu(?AA-E
insert into em$ vaues
!?A<(CRuedaC(CSe#retarioC(?A>(C?MH5ARHKLC(?M@AAA(nu(?AA-E
insert into em$ vaues
!?AI(C5artinC(CContabeC(?A>(C?MH5ARHKLC(><@AAA(nu(?AA-E
insert into em$ vaues
!?A@(CSan;C(CComer#iaC(?A?(C?MH5ARHKLC(?@AAAA(?A(?AA-E
insert into em$ vaues
!?AL(CLo$e;C(CComer#iaC(?A?(C>?H5ARHKLC(?@AAAA(?@(?AA-E
insert into em$ vaues
!>A?(C4ere;C(C/ire#torC(?A?(CIHJ'%HKLC(<@AAAA(nu(>AA-E
insert into em$ vaues
!>A>(CSastreC(CAnaistaC(>A?(CNHJ'%HKLC(<AAAAA(nu(>AA-E
insert into em$ vaues
!>A<(C7ar#iaC(C4ro9ramadorC(>A>(CNHJ'%HKLC(>>@AAA(nu(>AA-E
insert into em$ vaues
!>AI(C5ateoC(C4ro9ramadorC(>A>(CNHJ'%HKLC(>AAAAA(nu(>AA-E
insert into em$ vaues
!<A?(C6usteC(C/ire#torC(?A?(C<H&CTHKLC(<@AAAA(nu(<AA-E
insert into em$ vaues
!<A>(CRe#ioC(CAnaistaC(<A?(CIH0EBHKMC(<AAAAA(nu(<AA-E
insert into em$ vaues
!<A<(C7ar#iaC(C4ro9ramadorC(<A>(CIH0EBHKMC(>?AAAA(nu(<AA-E
insert into em$ vaues
!<AI(CSantanaC(C4ro9ramadorC(<A>(CIH0EBHKMC(>AAAAA(nu(<AA-E
#.2 &ctualizacin
Otra de las operaciones ms comunes es la modificacin de la informacin almacenada en las tablas.
Para ello se utiliza el comando UPDATE cuya sintaxis se muestra a continuacin.
'4/ATE taba SET "#oumna = e1$resi,n()
*
[O2ERE #ondi#i,n]E
Se especificar en la clusula SET las columnas que se actualizarn y con qu valores. La clusula
WHERE indica las filas con las que se va a trabajar. Si se omite la actualizacin afectar a todas las
filas de la tabla.
#.3 (orrado
Con insertar y modificar, la otra operacin que completa el trio es la de borrado de filas. La sintaxis es
la que sigue:
/ELETE 0R&5 taba [O2ERE #ondi#i,n]E
Borrar todas las filas que cumplan la condicin especificada en la clusula ,!ERE. Si esta clusula no
se fija, se borrarn todas las filas de la tabla. Aqu cabe decir que aunque con DELETE borremos todas
las filas de una tabla, no borramos la definicin de la tabla del diccionario y podemos insertar datos
posteriormente en la tabla. Esta es una diferencia con la sentencia DROP TA)LE, que produce la
eliminacin tanto del contenido de la tabla como de la definicin de la misma.
) *eleccin
La recuperacin de los datos en el lenguaje SQL se realiza mediante la sentencia SELECT, seleccionar.
Esta sentencia permite indicar al SGBD la informacin que se quiere recuperar. Esta es la sentencia
SQL, con diferencia, ms habitual. La sentencia SELECT consta de cuatro partes bsicas:
La clusula SELECT seguida de la descripcin de lo que se desea ver, los nombres de las
columnas a seleccionar. Esta parte es obligatoria.
La clusula FRO( seguida de la especificacin de las tablas de las que se han de obtener los
datos. Esta parte es obligatoria.
La clusula ,!ERE seguida por un criterio de seleccin, una condicin. Esta parte es opcional.
La clusula ORDER )1 seguida por el criterio de ordenacin. Esta parte es opcional.
Una primera aproximacin a la sintaxis de la sentencia SELECT puede mostrarnos la siguiente
expresin:
SELECT "8 . "#oumna()
*
)
0R&5 "taba()
*
[O2ERE #ondi#i,n]
[&R/ER B6 "e1$resi,nCoumna [ASC . /ESC]()
*
]E
Como una primera utilizacin de la sentencia SELECT podemos utilizarla para ver todas las tablas que
tenemos en la base de datos.
SQL> see#t tabe_name from user_tabesE
TABLE_%A5E
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
/E4
E54
Un breve anlisis de la sentencia anterior nos permite observar que hemos consultado sobre la columna
llamada table_3a$e almacenada en la tabla 45er_table5, que es la tabla que guarda la
informacin sobre todas las tablas de cada usuario.
).1 *eleccin de Columnas
Las columnas a seleccionar se enumeran sin ms en la clusula SELECT. Si se desea seleccionar todas
las columnas de una tabla se puede hacer enumerando a todas las columnas o colocando un asterisco,
., en su lugar.
Cuando se consulta una base de datos, los nombres de las columnas se usan como cabeceras de
presentacin. Si ste resulta demasiado largo, corto o crptico, puede cambiarse con la misma sentencia
SQL de consulta, creando un alias de columna.
SQL> see#t nombre P/e$artamentoP( o# PEstQ enP from de$E

/e$artamento Esta en
HHHHHHHHHHHHHHH HHHHHHHHHH
Administra#ion Daadoid
+*/ Boe#io
4rodu##ion Ci9aes
).2 Cl+usula FROM
La clusula FRO( define las tablas de las que se van a seleccionar las columnas.
Se puede aadir al nombre de las tablas el usuario propietario de las mismas de la forma
454ario2tabla. De esta manera podemos distinguir entre las tablas de un usuario y otro. Oracle
siempre considera como prefijo el nombre del propietario de las tablas, aunque no se lo indiquemos. De
esta forma dos o ms usuarios pueden tener tablas que se llamen igual sin que surjan conflictos. Si
quisiramos acceder a las filas de la tabla de6 del usuario 76ere8, (ademas de tener privilegios de
lectura sobre esa tabla) deberamos escribir la siguiente sentencia SQL:
SQL> see#t 8 from F$ere;.de$E
Tambin se puede asociar un alias a las tablas para abreviar los nombres de las tablas. Un ejemplo se
puede ver en la sentencia SQL siguiente:
SQL> see#t d.nombre from de$ dE
).3 Cl+usula WHERE
Hasta ahora hemos visto como puede utilizarse la sentencia SELECT para recuperar todas las columnas
o un subconjunto de ellas de una tabla. Pero este efecto afecta a todas las filas de la tabla, a menos que
especifiquemos algo ms en la clusula ,!ERE. Es aqu donde debemos proponer la condicin que han
de cumplir todas las filas para salir en el resultado de la consulta. La complejidad del criterio de
bsqueda es prcticamente ilimitada, y en l se pueden conjugar operadores de diversos tipos con
funciones de columnas, componiendo expresiones ms o menos complejas.
Operadores de Comparacin
Operador Operacin Ejemplo
= Igualdad
5elect . fro$ e$6 9here
cod_de6 : -;;<
!=, <>, ^= Desigualdad
5elect . fro$ e$6 9here
cod_de6 =: -;;<
< Menor que
5elect . fro$ e$6 9here
cod_de6 > ";;<
> Mayor que
5elect . fro$ e$6 9here
cod_de6 ? ";;<
<= Menor o igual que
5elect . fro$ e$6 9here
cod_de6 >: ";;<
>= Mayor o igual que
5elect . fro$ e$6 9here
cod_de6 ?: ";;<
in
Igual a cualquiera de los miembros entre
parntesis
5elect . fro$ e$6 9here
cod_de6 i3 #-;;+ @;;&<
not in
Distinto a cualquiera de los miembros
entre parntesis
5elect . fro$ e$6 9here
cod_de6 3ot i3 #";;&<
between Contenido en el rango
5elect . fro$ e$6 9here
cod_e$6 bet9ee3 -;; a3d
-AA<
not
between
Fuera del rango
5elect . fro$ e$6 9here
cod_e$6 3ot bet9ee3 -;;
a3d -AA<
like '_abc
%'
Contiene la cadena 'abc' a partir del
segundo carcter y luego cualquier
cadena de caracteres
5elect . fro$ e$6 9here
3o$bre liBe C(aDC<
Operadores de Aritmticos
Operador Operacin Ejemplo
+ Suma
5elect 3o$bre+ 5alarioEco$i5io3 fro$ e$6
9here oficio:CENDEDORC<
- Resta
5elect 3o$bre fro$ e$6 9here 5F5dateG
fecha_alta ? @HI<
* Producto 5elect 3o$bre+ 5alario.-" fro$ e$6<
/ Divisin 5elect 3o$bre+ 5alario/@- fro$ e$6<
Operadores de Cadenas de Caracteres
Operador Operacin Ejemplo
|| Concatenacin 5elect 3o$breJJoficio fro$ e$6<
).4 Cl+usula ORDER BY
Se utiliza para especificar el criterio de ordenacin de la respuesta a la consulta. Por defecto la
ordenacin es ascendente, aunque se puede especificar un orden descendente. La ordenacin se puede
establecer sobre el contenido de columnas o sobre expresiones con columnas. A continuacin se puede
ver un ejemplo de uso de la clusula ORDER )1 en la que quiere obtener un listado de los empleados
ordenado de manera descendente por su salario y en caso de igualdad de salario, ordenado
ascendentemente por su nombre.
SQL> see#t nombre( saario from em$ order b: saario des#( nombreE
%&5BRE SALAR+&
HHHHHHHHHH HHHHHHHHHH
Cano I@AAAA
4ere; <@AAAA
Ron#a <@AAAA
6uste <@AAAA
Re#io <AAAAA
Sastre <AAAAA
5artin ><@AAA
7ar#ia >>@AAA
7ar#ia >?AAAA
5ateo >AAAAA
Santana >AAAAA
Rueda ?M@AAA
Lo$e; ?@AAAA
San; ?@AAAA

?I roRs see#ted.
). Cl+usula DISTINCT
Cuando se realiza una consulta sobre una tabla en la que se extrae informacin de varias columnas,
puede ocurrir que, si no incluimos la/s columna/s que forman la clave principal, obtengamos filas
repetidas en la respuesta.
Si este comportamiento no nos resulta satisfactorio podemos utilizar la clusula DISTINCT para
eliminar las filas duplicadas obtenidas como respuesta a una consulta.
Podemos ver como funciona en el siguiente ejemplo, en el que preguntamos por los distintos oficios de
nuestros empleados.
SQL> see#t ofi#io from em$E
Sin utilizar la clusula DISTINCT obtendremos la siguiente respuesta
&0+C+&
HHHHHHHHHHH
4residente
/ire#tor
Se#retario
Contabe
Comer#ia
Comer#ia
/ire#tor
Anaista
4ro9ramador
4ro9ramador
/ire#tor
Anaista
4ro9ramador
4ro9ramador

?I roRs see#ted.
Pero si incluimos la clusula DISTINCT la respuesta vara para adecuarse ms a nuestras espectativas.
SQL> see#t distin#t ofi#io from em$E

&0+C+&
HHHHHHHHHHH
Anaista
Comer#ia
Contabe
/ire#tor
4residente
4ro9ramador
Se#retario

M roRs see#ted.
).# Funciones
Existen en SQL muchas funciones que pueden complementar el manejo de los datos en las consultas.
Se utilizan dentro de las expresiones y actuan con los valores de las columnas, variables o constantes.
Se pueden incluir en las clsulas SELECT, ,!ERE y ORDER )1.
Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones para cada tipo
de datos:
aritmticas,
de cadenas de caracteres,
de manejo de fechas,
de conversin,
otras,
de grupo.
Funciones Aritmticas
Funcin Cometido Ejemplo Resultado
ABS(n) Calcula el valor absoluto de n.
5elect ab5#G-I&
fro$ d4al<
15
CEIL(n)
Calcula el valor entero inmediatamente
superior o igual a n.
5elect
ceil#-I2K& fro$
d4al<
16
FLOOR(n)
Calcula el valor entero inmediatamante
inferior o igual a n.
5elect
floor#-I2K& fro$
d4al<
15
MOD(m,n)
Calcula el resto resultante de dividir m
entre n.
5elect $od#--+L&
fro$ d4al<
3
POWER(m
,n)
Calcula la potencia n-esima de m.
5elect
6o9er#@+"& fro$
d4al<
9
ROUND(m
,n)
Calcula el redondeo de m a n decimales.
Si n<0 el redondeo se efectua a por la
izquierda del punto decimal.
5elect
ro43d#-"@2LIH+-&
fro$ d4al<
123.5
SQRT(n) Calcula la raz cuadrada de n.
5elect 5Mrt#L&
fro$ d4al<
2
TRUNC(m
,n)
Calcula m truncado a n decimales (n
puede ser negativo).
5elect
tr43c#-"@2LIH+-&
fro$ d4al<
123.4
SIGN(n)
Calcula el signo de n, devolviendo -1 si
n<0, 0 si n=0 y 1 si n>0.
5elect 5i*3#G-"&
fro$ d4al<
-1
Funciones de Cadenas de Caracteres
Funcin Cometido Ejemplo Resultado
CHR(n)
Devuelve el carcter cuyo
valor codificado es n.
5elect chr#HI& fro$
d4al<
A
ASCII(cad)
Devuelve el valor ascii de
cad.
5elect a5cii#CAC&
fro$ d4al<
65
CONCAT(cad
1,cad2)
Devuelve cad1
concatenada con cad2.
Esta funcin es
esquivalente al operador ||.
5elect
co3cat#co3cat#3o$br
e+C e5 C&+oficio&
fro$ e$6<
Cano es Presidente,
etc.
LOWER(cad)
Devuelve la cadena cad
con todas sus letras
convertidas a minsculas.
5elect
lo9er#C(i3U5C4lA5C&
fro$ d4al<
minusculas
UPPER(cad)
Devuelve la cadena cad
con todas sus letras
convertidas a maysculas.
5elect
466er#C$a14SC4lA5C&
fro$ d4al<
MAYUSCULAS
INITCAP(cad
)
Devuelve cad con el
primer caracter en
maysculas.
5elect
i3itca6#Ci5abelC&
fro$ d4al<
Isabel
LPAD(cad1,n,
cad2)
Devuelve cad1 con
longitud n, y ajustada a la
derecha, rellenando por la
izquierda con cad2.
5elect
l6ad#CPC+I+C.C&
fro$ d4al<
****P
RPAD(cad1,n,
cad2)
Devuelve cad1 con
longitud n, y ajustada a la
izquierda, rellenando por
la derecha con cad2.
5elect
r6ad#CPC+I+C.C&
fro$ d4al<
P****
REPLACE(ca
d,ant,nue)
Devuelve cad en la que
cada ocurrencia de la
cadena ant ha sido
sustituida por la cadena
nue.
5elect
re6lace#Cdi*oC+CiC+
CieC& fro$ d4al<
diego
SUBSTR(cad,
m,n)
Devuelve la sudcadena de
cad compuesta por n
caracteres a partir de la
posicion m.
5elect
54b5tr#CA)CDEF'C+@+
"& fro$ d4al<
CD
LENGTH(cad
)
Devuelve la longitud de
cad.
5elect
le3*th#Ccade3aC&
fro$ d4al<
6
Funciones de Manejo de Fechas
Funcin Cometido Ejemplo Resultado
SYSDATE
Devuelve la fecha y hora
actuales.
5elect 5F5date fro$
d4al<
14-MAR-97
ADD_MONTHS(
d,n)
Devuelve la fecha d
incrementada en n meses.
5elect
add_$o3th5#5F5date+
L& fro$ d4al<
14-JUL-97
LAST_DAY(d)
Devuelve la fecha del ltimo
da del mes de d.
5elect
la5t_daF#5F5date&
fro$ d4al<
31-MAR-97
MONTHS_BET
WEEN(d1, d2)
Devuelve la diferencia en
meses entre las fechas d1 y
d2.
5elect
$o3th5_bet9ee3#5F5d
ate+C;-GNANGAKC&
fro$ d4al<
2.43409424
NEXT_DAY(d,ca
d)
Devuelve la fecha del primer
da de la semana cad despus
de la fecha d.
5elect
3eOt_daF#5F5date+
C543daFC& fro$
d4al<
16-MAR-97
Funciones de Conversin de Tipos
Funcin Cometido Ejemplo Resultado
TO_NUMBER(
cad,fmto)
Convierte la cadena cad a un
nmero, opcionalmente de acuerdo
con el formato fmto.
5elect
to_34$ber#C-"@LI
C& fro$ d4al<
124345
TO_CHAR(d,
fmto)
Convierte la fecha d a una cadena de
caracteres, opcionalmente de
acuerdo con el formato fmto.
5elect
to_char#5F5date&
fro$ d4al<
'14-MAR-
97'
TO_DATE(cad,
fmto)
Convierte la cadena cad de tipo
varchar2 a fecha, opcionalmente de
acuerdo con el formato fmto.
5elect
to_date#C-GNANG
AKC& fro$ d4al<
01-JAN-97
Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la presentacin de
una fecha. En la siguiente tabla se presentan algunos formatos de fecha y el resultado que generan.
Mscaras de Formato Numricas
Formato Cometido Ejemplo Resultado
cc scc Valor del siglo.
5elect
to_char#5F5date+CccC&
fro$ d4al<
20
y,yyy sy,yyy
Ao con coma, con o sin
signo.
5elect
to_char#5F5date+CF+FFFC
& fro$ d4al<
1,997
yyyy yyy
yy y
Ao sin signo con cuatro,
tres, dos o un dgitos.
5elect
to_char#5F5date+CFFFFC&
fro$ d4al<
1997
q Trimestre.
5elect
to_char#5F5date+CMC&
1
fro$ d4al<
ww w
Nmero de la semana del ao
o del mes.
5elect
to_char#5F5date+C99C&
fro$ d4al<
11
mm Nmero del mes.
5elect
to_char#5F5date+C$$C&
fro$ d4al<
03
ddd dd d
Nmero del da del ao, del
mes o de la semana.
5elect
to_char#5F5date+CdddC&
fro$ d4al<
073
hh hh12
hh24
La hora en formato 12h. o
24h.
5elect
to_char#5F5date+ChhC&
fro$ d4al<
12
mi Los minutos de la hora.
5elect
to_char#5F5date+C$iC&
fro$ d4al<
15
ss sssss
Los segundos dentro del
minuto, o desde las 0 horas.
5elect
to_char#5F5date+C55555C
& fro$ d4al<
44159
Mscaras de Formato de Caracteres
Formato Cometido Ejemplo Resultado
syear
year
Ao en Ingls
5elect
to_char#5F5date+C5Fea
r& fro$ d4al<
nineteen ninety-
seven
month o
mon
Nombre del mes o su
abreviatura de tres letras.
5elect
to_char#5F5date+C$o3t
hC& fro$ d4al<
march
day dy
Nombre del da de la semana o
su abreviatura de tres letras.
5elect
to_char#5F5date+CdaFC
& fro$ d4al<
friday
a.m. p.m. El espacio del da.
5elect
to_char#5F5date+Ca2$2
C& fro$ d4al<
p.m.
b.c. a.d.
Indicador del ao respecto al
del nacimiento de Cristo.
5elect
to_char#5F5date+Cb2c2
C& fro$ d4al<
a.d.
Otras Funciones
Funcin Cometido Ejemplo Resultado
DECODE(var, val1,
cod1, val2, cod2, ...,
defecto)
Convierte el valor de
var, de acuerdo con la
codificacin.
5elect decode#oficio+
CPre5ide3teC+ CPC+
CDirectorC+ CDC+ CXC&
fro$ e$6<
P, D, X, ...
GREATEST(exp1, Devuelve el mayor sin ejemplo. sin ejemplo.
exp2, ...) valor de una lista.
LEAST(cad,fmto)
Devuelve el menor
valor de una lista.
sin ejemplo. sin ejemplo.
NVL(val, exp)
Devuelve la expresin
exp si val es NULL, y
val si en otro caso.
5elect
5alarioE3Pl#co$i5io3+;
& fro$ e$6<
450000,
350000, ...
).) Cl+usula GROUP BY
SQL nos permite agrupar las filas resultado de una consulta en conjuntos y aplicar funciones sobre esos
conjuntos de filas.
La sintaxis es la siguiente:
SELECT "8 . "#oumna()
*
)
0R&5 "taba()
*
O2ERE #ondi#i,n
7R&'4 B6 "#oumna ()
*
2AD+%7 #ondi#i,n
&R/ER B6 "e1$resi,nCoumna [ASC . /ESC]()
*
E
En la clusula 'ROUP )1 se colocan las columnas por las que vamos a agrupar. Y en la clusula
!AIN' se especifica la condicin que han de cumplir los grupos para pasar al resultado.
La evaluacin de las diferentes clusulas en tiempo de ejecucin se efecta en el siguiente orden:
,!ERE filtra las filas
'ROUP )1 crea una tabla de grupo nueva
!AIN' filtra los grupos
ORDER )1 clasifica la salida
Un ejemplo de utilizacin de la seleccin de grupos puede ser seleccionar los empleados agrupados por
su oficio. Un primer intento de consulta es el siguiente:
SQL> see#t nombre( ofi#io from em$ 9rou$ b: ofi#ioE

see#t nombre( ofi#io from em$
8
ERR&R at ine ?S
&RAHAAKMKS not a 7R&'4 B6 e1$ression
Se presenta un error debido a que cuando se utiliza 'ROUP )1, las columnas implicadas en el
SELECT y que no aparezcan en la clusula 'ROUP )1 deben tener una funcin de agrupamiento. En
otras palabras, la columna 3o$bre debe tener una funcin de agrupamiento que actue sobre ella (max,
min, sum, count, avg). Si no puede ser as, deber llevar dicha columna a la clusula 'ROUP )1.
De nuevo, el ejemplo quedar as:
SQL> see#t #ount!nombre-( ofi#io from em$ 9rou$ b: ofi#ioE

C&'%T!%&5BRE- &0+C+&
HHHHHHHHHHHHH HHHHHHHHHHH
> Anaista
> Comer#ia
? Contabe
< /ire#tor
? 4residente
I 4ro9ramador
? Se#retario

M roRs see#ted.
La5 f43cio3e5 de a*r46a$ie3to M4e 5e 64ede3 4tili8ar 5o3 la5 5i*4ie3te52
Funciones de Agrupamiento
Funcin Cometido Ejemplo
COUNT(col) Cuenta el nmero de filas agrupadas.
5elect
co43t#3o$bre&+oficio
fro$ e$6 *ro46 bF
oficio<
AVG(col)
Calcula el valor medio de todos los
valores de la columna col.
5elect
aP*#5alario&+oficio fro$
e$6 *ro46 bF oficio<
MAX(col)
Calcula el valor mximo de todos los
valores de la columna col.
5elect
$aO#5alario&+oficio fro$
e$6 *ro46 bF oficio<
MIN(col)
Calcula el valor mnimo de todos los
valores de la columna col.
5elect
$i3#5alario&+oficio fro$
e$6 *ro46 bF oficio<
SUM(col)
Calcula la suma de los valores de la
columna col.
5elect 54$#5alario&+
oficio fro$ e$6 *ro46 bF
oficio<
STDDEV(col)
Calcula la desviacin tpica de los
valores de la columna col sin tener en
cuenta los valores nulos.
5elect 5tddeP#5alario&+
oficio fro$ e$6 *ro46 bF
oficio<
VARIANCE(c
ol)
Calcula la varianza de los valores de
la columna col sin tener en cuenta los
valores nulos.
5elect
Paria3ce#5alario&+
oficio fro$ e$6 *ro46 bF
oficio<
Hay que tener en cuenta que los valores nulos no participan en el clculo de las funciones de conjuntos.
Estas funciones se pueden utilizar con las clusulas DISTINCT y ALL. Tambin se pueden utilizar
aunque no realicemos agrupacin alguna en la consulta, considerando a toda la tabla como un grupo.
SQL> see#t #ount!8- from em$E

C&'%T!8-
HHHHHHHHHH
?I
)., E-presiones con *entencias Select
El resultado de cada consulta es un conjunto de filas. Y con conjuntos se pueden realizar tres
operaciones tpicas: la unin, la interseccin y la diferencia.
Unin, UNION
Combina todas las filas del primer conjunto con todas las filas del segundo. Cualquier fila
duplicada se reducir a una sla.
Interseccin, INTERSECT
Examinar las filas de los conjuntos de entrada y devolver aquellas que aparezcan en ambos.
Todas las filas duplicadas sern eliminadas antes de la generacin del conjunto resultante.
Diferencia, (INUS
Devuelve aquellas filas que estn en el primer conjunto pero no en el segundo. Las filas
duplicadas del primer conjunto se reducirn a una fila nica antes de empezar la comparacin con
el segundo conjunto.
Reglas para el Manejo de los Operadores de Conjuntos:
Pueden ser encadenados en cualquier combinacin, siendo evaluados de izquierda a derecha.
No existe jerarqua de precedencia en el uso de estos operadores, pero puede ser forzada
mediante parntesis.
Pueden ser empleados con conjuntos de diferentes tablas siempre que se apliquen las siguientes
reglas:
Las columnas son relacionadas en orden, de izquierda a derecha.
Los nombres de las columnas son irrelevantes.
Los tipos de datos deben coincidir.
Como ejemplo podemos consultar sobre todos los nombres de empleado que trabajan para los
departamentos 100 o 300. Esto se consigue restando a todos los nombres de empleados, aquellos que
estn en el departamento 200.
SQL> see#t nombre from em$
> minus
< see#t nombre from em$ R=ere #od_de$=>AAE
%&5BRE
HHHHHHHHHH
Cano
Lo$e;
5artin
Re#io
Ron#a
Rueda
Santana
San;
6uste

K roRs see#ted.
).. Combinaciones
Hasta ahora hemos construido consultas con una nica tabla, pero esto no debe ser siempre as.
De hecho, slo se alcanza la verdadera potencia del SQL cuando combinamos el contenido de ms de
una tabla.
Supongamos que queremos conseguir una lista con los empleados y los departamentos para los que
trabajan. Esta informacin est repartida en las dos tablas que tenemos, e$6 y de6. As, podramos
intentar una consulta que seleccionara el campo 3o$bre de la tabla e$6 y el 3o$bre del
departamento. Y aqu surge el primer problema, cmo distinguimos entre dos columnas que
llamndose igual, pertenecen a tablas distintas? Para eso se utiliza como prefijo o el nombre de la tabla
(de623o$bre) o un alias de tabla, un nombre que se asocia a cada tabla y se coloca como prefijo a la
columna (d23o$bre).
Realicemos la consulta ...
SQL> see#t e.nombre( d.nombre from em$ e( de$ dE

%&5BRE %&5BRE
HHHHHHHHHH HHHHHHHHHHHHHHH
Cano Administra#ion
Ron#a Administra#ion
Rueda Administra#ion
5artin Administra#ion
San; Administra#ion
Lo$e; Administra#ion
4ere; Administra#ion
Sastre Administra#ion
7ar#ia Administra#ion
5ateo Administra#ion
6uste Administra#ion
Re#io Administra#ion
7ar#ia Administra#ion
Santana Administra#ion
Cano +*/
Ron#a +*/
Rueda +*/
...
I> roRs see#ted.
El resultado puede sorprender un poco. Lo que obtenemos es el producto cartesiano de todos los
empleados por todos los departamentos. SQL ha cogido cada fila de la tabla e$6 y le ha asociado todos
los cod_de6 de la tabla de6.
Para conseguir lo que queremos tenemos que forzar que se asocie a un empleado con el nombre del
departamento para el que trabaja. Y esto se puede hacer si aadimos la condicin de que el cod_de6
tenga el mismo valor en la fila de la tabla e$6 que en la fila escogida de la tabla de6:
SQL> see#t e.nombre( d.nombre from em$ e( de$ d
>> R=ere e.#od_de$ = d.#od_de$E

%&5BRE %&5BRE
HHHHHHHHHH HHHHHHHHHHHHHHH
Cano Administra#ion
Ron#a Administra#ion
Rueda Administra#ion
5artin Administra#ion
San; Administra#ion
Lo$e; Administra#ion
4ere; +*/
Sastre +*/
7ar#ia +*/
5ateo +*/
6uste 4rodu##ion
Re#io 4rodu##ion
7ar#ia 4rodu##ion
Santana 4rodu##ion

?I roRs see#ted.
De la misma manera se pueden combinar ms de dos tablas. Lo importante es emparejar los campos
que han de tener valores iguales.
Reglas de Combinacin:
Pueden combinarse tantas tablas como se desee.
El criterio de combinacin puede estar formado por ms de una pareja de columnas.
En la clusula SELECT pueden citarse columnas de ambas tablas, condicionen o no la
combinacin.
Si hay columnas con el mismo nombre en las distintas tablas, deben identificarse especificando
la tabla de procedencia o utilizando un alias de tabla.
Existe un tipo especial de combinacin llamada Combinacin Externa. Suponga que se crea un nuevo
departamento, (i35ert i3to de6 Pal4e5 #L;;+CDi5trib4cio3C+CalladolidC&<)
pero todava no hemos asignado personal al mismo. Si realizamos la consulta anterior, el nuevo
departamento no aparecer en la respuesta. Pero esto se puede evitar si sealamos en la clusula
,!ERE la posibilidad de que en la tabla de empleados no exista alguno de los cdigos de departamento
que si exista en la tabla de departamentos. Esto se hace colocando un #E& de la siguiente manera:
SQL> see#t e.nombre( d.nombre
> from em$ e( de$ d
< R=ere e.#od_de$!*-=d.#od_de$E

%&5BRE %&5BRE
HHHHHHHHHH HHHHHHHHHHHHHHH
Cano Administra#ion
Ron#a Administra#ion
Rueda Administra#ion
5artin Administra#ion
San; Administra#ion
Lo$e; Administra#ion
4ere; +*/
Sastre +*/
7ar#ia +*/
5ateo +*/
6uste 4rodu##ion
Re#io 4rodu##ion
7ar#ia 4rodu##ion
Santana 4rodu##ion
/istribu#ion

?@ roRs see#ted.
).1/ *ubconsultas
A veces se han de utilizar en una consulta los resultados de otra consulta, llamada subconsulta.
Un ejemplo de esto ocurre cuando queremos conocer los nombres de los empleados cuyo salario est
por encima de la media:
SQL> see#t nombre from em$
> R=ere saario > !see#t av9!saario- from em$-E

%&5BRE
HHHHHHHHHH
Cano
Ron#a
4ere;
Sastre
6uste
Re#io

L roRs see#ted.
La consulta ms interna calcula el salario medio, y la consulta ms externa lo utiliza para seleccionar
los nombres que ganan ms que la media.
El valor de comparacin puede ser un valor simple, como en el ejemplo anterior, o un conjunto de
valores. Hay que tener en cuenta este detalle ya que el tipo de operador a utilizar vara. En el primer
caso se puede utilizar un operador de comparacin de carcter aritmtico (<, >, etc.). Y en el segundo
uno de tipo lgico (IN).
Las subconsultas pueden devolver ms de una columna, y se habrn de comparar de manera
consecuente:
Las columnas de la clausula ,!ERE de la consulta principal deben estr agrupadas por
parentesis.
Las columnas encerradas entre parntesis deben coincidir en nmero y tipo de datos con los
datos que devuelve la subconsulta.
El nivel de anidamiento de subconsultas es ilimitado.
Se puede utilizar una subconsulta para insertar valores en una tabla en el momento de la creacin de la
misma con la clusula AS. Si quisieramos crear una tabla con los datos de los empleados del
departamento 200 lo podramos hacer de la siguiente manera:
SQL> #reate tabe de$>AA !nombre( ofi#io-
> as see#t nombre(ofi#io from em$
< R=ere #od_de$=>AAE
Tabe #reated.
No es necesario especificar tipos ni tamaos de las columnas, ya que vienen determinados por los tipos
y tamaos de las columnas recuperadas en la subconsulta.
, Eliminacin
Cuando una tabla ya no es til y no vamos a volver a necesitarla debe ser borrada. Esta operacin se
puede realizar con el comando DROP TA)LE.
/R&4 TABLE taba [CASCA/E C&%STRA+%TS]E
Se borra la tabla de la base de datos, borrando toda la informacin contenida en la tabla, es decir, todas
las filas. Tambin se borrar toda la informacin que sobre la tabla existiera en el diccionario.
Puede que si alguna columna de esta tabla a borrar sirva como clave ajena de alguna tabla detalle,
impida la eliminacin de la tabla, ya que existe una restriccin que requiere de la existencia de la tabla
maestra. Esto se puede areglar colocando la coletilla CASCADE CONSTRAINTS. Esto produce que las
restricciones de la tabla detalle se borren antes de borrar la tabla maestra.
La siguiente sentencia produce la eliminacin de la tabla de departamentos.
SQL> dro$ tabe de$ #as#ade #onstraintsE

Tabe dro$$ed.
. 0istas
Una vista es como una ventana a travs de la cual se puede consultar o cambiar informacin de la tabla
a la que est asociada.
Las vistas tienen la misma estructura que una tabla: filas y columnas. La nica diferencia es que slo se
almacena de ellas la definicin, no los datos. Los datos que se recuperan mediante una consulta a una
vista se presentarn igual que los de una tabla. De hecho, si no se sabe que se est trabajando con una
vista, nada hace suponer que es as. Al igual que sucede con una tabla, se pueden insertar, actualizar,
borrar y seleccionar datos en una vista. Aunque siempre es posible seleccionar datos de una vista, en
algunas condiciones existen restricciones para realizar el resto de las operaciones sobre vistas.
Por qu utilizar vistas?
Las vistas pueden proporcionar un nivel adicional de seguridad. Por ejemplo, en la tabla de
empleados, cada responsable de departamento slo tendr acceso a la informacin de sus
empleados. La siguiente sentencia produce la creacin de la vista de los empleados del
departamento de administracin (cod_de6:-;;).
SQL> #reate vieR am$Admin as
> see#t 8 from e$ R=ere #od_de$=?AAE
DieR #reated.
Las vistas permiten ocultar la complejidad de los datos. Una BD se compone de muchas tablas.
La informacin de dos o ms tablas puede recperarse utilizando una combinacin de dos o ms
tablas, y estas combinaciones pueden llegar a ser muy confusas. Creando una vista como
resultado de la combinacin se puede ocultar la complejidad al usuario.
Las vistas ayudan a mantener unos nombres razonables.
Creacin de una Vista
CREATE D+EO vista [!"#oumna ()
*
] AS #onsuta E
La vista se crea con las columnas que devuelve una consulta. Si no nos importa que las columnas de la
vista hereden los nombres de las columnas recuperadas en la consulta no tenemos que especificarlos.
Borrado de una Vista
/R&4 D+EO vista E
..1 1peraciones sobre 0istas
Consultas
La consultas sobre las vistas se tratan de igual modo que sobre las tablas.
Actualizaciones
La informacin puede ser actualizada en las vistas directamente o a travs de las tablas sobre las que se
definen.
Esisten algunas restricciones:
Borrado de filas de una tabla a travs de una vista
La vista se debe crear con filas de una sola tabla; sin utilizar las clusulas 'ROUP )1 y
DISTINCT; y sin utilizar funciones de grupo o referencias a pseudocolumnas (ROWNUM).
Actualizacin de filas a travs de una vista
La vista ha de estar definida segn las restricciones anteriores y adems ninguna de las columnas
a actualizar debe haber sido definida como una expresin.
Insercin de filas en una tabla a travs de una vista
Todas las restricciones y adems todas las columnas obligatorias de la tabla asociada deben estar
presentes en la vista.
..2 0istas de m+s de una Tabla
Se pueden definir vistas sobre ms de una tabla. Por ejemplo, sobre la combinacin de dos tablas.
Podemos querer ver todos los datos de los empleados del departamento Administracin.
SQL> #reate vieR de$Admin !#od_em$( nombre_em$( nombre_de$(
dir-
> as see#t e.#od_em$( e.nombre( d.nombre( d.o#
< from em$ e( de$ d
I R=ere e.#od_de$=d.#od_de$ and d.nombre=CAdministra#ionCE
SQL> see#t 8 from de$AdminE

C&/_E54 %&5BRE_E54 %&5BRE_/E4 /+R
HHHHHHHHHH HHHHHHHHHH HHHHHHHHHHHHHHH HHHHHHHHHH
?A? Cano Administra#ion Daadoid
?A> Ron#a Administra#ion Daadoid
?A< Rueda Administra#ion Daadoid
?AI 5artin Administra#ion Daadoid
?A@ San; Administra#ion Daadoid
?AL Lo$e; Administra#ion Daadoid

L roRs see#ted.
1/ 2u3ando con los 4ombres
A continuacin dos comandos que permiten jugar con los nombres de los objetos en SQL: SINON1( y
RENA(E.
1/.1 *innimos
SQL permite crear un sinnimo para una tabla o vista. Esto supone que pueden utilizarse dos nombres
diferentes para un mismo objeto.
Creacin de un Sinnimo
CREATE S6%&%65 sinonimo 0&R [usuario.]"taba . vista) E
Borrado de un Sinnimo
/R&4 S6%&%65 sinonimo E
Una primera utilidad de los sinnimos es la posibilidad de independizar las aplicaciones de los nombres
fsicos de las tablas que manejan. Asi, las aplicaciones harn referencia a un sinnimo de tabla, que en
cada caso puede estar asociado a una tabla distinta.
Otra utilidad es la posibilidad de que un usuario acceda a las tablas de otro usuario como si fueran
suyas, siempre que tenga permiso para hacerlo, si al definir el sinnimo incluye el nombre del usuario
en la denominacin de la tabla. As si el usuarioA tiene permiso para leer el contenido de la tabla e$6
del usuarioB, entonces desde la ejecucin de la sentencia CREATE S1NON1( 6la3tilla FOR
454ario)2e$6 ver la tabla 454ario)2e$6 como 6la3tilla.
1/.2 Comando RENAME
El comando RENA(E se utiliza para modificar el nombre de una tabla, vista o sinnimo.
La sintsis es la siguiente
RE%A5E "taba . vista . sinonimo) to nuevo%ombre E
Esta sentencia cambiar el nombre antiguo por el nuevo, y a partir de este momento cualquier acceso al
objeto por el nombre antiguo ser respondido con un mensaje de error.
Conviene resaltar la diferencia entre el comando S1NON1( y el comando RENA(E. Mientras que el
primero mantiene el nombre original para acceder al objeto, el segundo elimina ese primer nombre
sustituyendolo por el nuevo.
11 5o !+s *657Plus
En este apartado vamos a profundizar un poco en las otras posibilidades que nos brinda SQL*Plus en
los:
ficheros de comandos, y
generacin de informes,
11.1 Ficheros de Comandos
Aunque ya vimos una introduccin a los ficheros de comandos en anteriormente, vamos ahora a
profundizar un poco en las posibilidades que nos ofrece SQL*Plus.
En un fichero de comandos se pueden incluir:
lneas de comentarios,
lneas de ejecucin,
lneas de comandos SQL, y
lneas de comandos SQL*Plus.
Lneas de Comentarios
Se pueden introducir comentarios en una archivo de comandos de tres maneras:
Utilizando del comando RE( del SQL*Plus.
Utilizando los delimitadores de comentario de SQL /. y ./.
Utilizando los smbolos de comentario PL/SQL "__".
Lneas de Ejecucin
Constan de una nica barra inclinada, "/", y se introducen a continuacin de cada sentencia SQL
indicando su ejecucin.
Sustituyen al punto y coma, "<" al final de las sentencias SQL.
Lneas de Comandos SQL
Se puede introducir cualquiera de los comandos SQL enumerados en este curso, y se ejecutarn de
manera secuencial.
Se permite el anidamiento de los ficheros de comandos.
Lneas 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 programacin.
Se pueden definir constantes y variables, capturar datos del teclado, introducir parmetros en la llamada
de un archivo de comandos, y alguna cosa ms.
Variables de Usuario
Se pueden definir Variables de usuario con el comando DEFINE
/E0+%E Dariabe = vaor
Para borrar una variable se utiliza el comando UNDEFINE
'%/E0+%E variabe
Como ejemplo se puede definir la variable OFICIO
SQL> define ofi#io=anaista
Variables de Sstitci!"
Las variables de sustitucin son un nombre de variable de usuario con el smbolo Q delante. Cuando
SQL*Plus detecta una variable de sustitucin en un comando, ejecuta el comando tomando el valor de
la variable.
Esto se puede ver en el ejemplo, donde preguntamos por los empleados que son analistas:
SQL> define ofi#io=Anaista
SQL> define taba=em$
SQL> see#t nombre( ofi#io from Ttaba R=ere ofi#io=CTofi#ioCE
od ?S see#t nombre( ofi#io from Ttaba R=ere ofi#io=CTofi#ioC
neR ?S see#t nombre( ofi#io from em$ R=ere ofi#io=CAnaistaC

%&5BRE &0+C+&
HHHHHHHHHH HHHHHHHHHHH
Sastre Anaista
Re#io Anaista
Captura de Datos desde el Terminal
En muchas ocasiones es necesario recoger datos desde un terminal, que luego sern utilizados en el
archivo de comandos. Para realizarlo se pueden utilizar dos medios: las variables de sustitucin o los
parmetros en la lnea de comandos.
Cuando SQL*Plus reconoce una variable de sustitucin sin valor asignado se lo pide al usuario:
SQL> see#t 8 from de$ R=ere nombre=CTnombrede$CE
Enter vaue for nombrede$S +*/
od ?S see#t 8 from de$ R=ere nombre=CTnombrede$C
neR ?S see#t 8 from de$ R=ere nombre=C+*/C

C&/_/E4 %&5BRE L&C
HHHHHHHHHH HHHHHHHHHHHHHHH HHHHHHHHHH
>AA +*/ Boe#io
Si se desea que SQL*Plus pregunte por el valor de la variable al usuario slo la primera vez que se
encuentra con ella, se colocar "QQ" delante de la variable de usuario.
Tambin se pueden utilizar hasta nueve parmetros en la lnea de comandos cuando se llama a la
ejecucin de un archivo de comandos.
En el archivo de comandos nos referiremos a los parmetros con las variables Q-, Q", ... ,QA que se
corresponden posicionalmente con ellos.
Desde el archivo de comandos se puede hacer referencia a los parmetros cualquier nmero de veces y
en cualquier orden.
Comandos de Comunicacin con el Usuario
Los siguientes comandos proporcionan un medio de comunicacin con el usuario:
PROMPT: presenta un mensaje en la pantalla.
ACCEPT: Solicita un valor y lo almacena en la variable de usuario que se especifque.
PAUSE: Obliga al usuario a pulsar Return despu de leer un mensaje.
Para ver cmo funcionan sirve el siguiente ejemplo:
$rom$t Bus#ar os datos de un em$eado.
$ause 4use Return.
a##e$t nombrem$ $rom$t CEm$eadoG C
see#t 8 from em$ R=ere nombre=CTnombrem$CE
Otros Comandos
Los siguientes comandos tambin se pueden incluir en un archivo de comandos:
CONNECT: para conectarse como otro usuario.
HELP: para obtener ayuda en lnea.
EXIT: para dejar SQL*PLus y salir al Sistema Operativo.
DESCRIBE DESC: para obtener informacin sobre la estructura de una tabla.
HOST o !: para ejecutar un comando del Sistema Operativo.
11.2 8eneracin de $n"ormes
Con SQL*Plus podemos dar forma a los resultados de las consultas para producir un informe.
Podremos:
Cambiar las cabeceras de las columnas.
Dar forma a las columnas de tipo 34$ber, Parchar", date y lo3*.
Copiar y listar atributos de presentacin de las columnas.
Suprimir valores duplicados e introducir espacios para mejorar la presentacin.
Realizar y mostrar clculos (totales, medias, mnimos, mximos, etc.).
Definir las dimensiones de las pginas.
Ubicar ttulos en la cabecera y pie de las pginas.
Introducir la fecha o el nmero de pgina en los ttulos.
Pero de todo esto slo vamos a ver el modo de realizar las operaciones ms comunes y sencillas.
Bsicamente, el formato con el que se van a presentar los resultados de las cosultas dependen de unos
parmetros y de unos comandos.
Parmetros
SET LINESIZE: pone el nmero mximo de caracteres por lnea. Por defecto vale 80 y el
mximo es 999.
SET PAGESIZE: pone el nmero de filas de la salida antes de empezar una nueva pgina. Por
defecto es 25. Incluye el ttulo y las lneas de pausa.
SET HEADING [ON | OFF]: Activa/desactiva la utilizacin de encabezados de columnas. Por
defecto est activado.
SET NULL texto: Indica la cadena de caracteres que hay que colocar en sustitucin de los
valores NULL. Por defecto es "".
SET ECHO [ON | OFF]: Activa/desactiva la visualizacin de los comandos que SQL*Plus
ejecuta segn van siendo tratados. Por defecto est desactivada.
SET FEEDBACK [ n | ON | OFF]: Muestra el nmero de registros recuperados en cada consulta
cuando se recuperan n o ms registros. ON se pueden considerar como n=1, y OFF como n=0.
SET VERIFY [ON | OFF]: Controla la salida de confirmacin para los valores de las variables
de sustitucin. Por defecto est activado.
Comandos
TTITLE: formacin del encabezado de pgina.
BTITLE: formacin del pie de pgina.
COLUMN: formatear cada columna.
BREAK: puntos de ruptura en los listados.
COMPUTE: realizar clculos con las columnas.

Você também pode gostar