Está en la página 1de 41

FUNCIONES SQL ORACLE

FUNCIONES DE CONVERSIN DE CADENAS DE CARACTERES

LOWER (Columna | Expresin)


Convierte en minsculas las cadenas de caracteres en maysculas.
SELECT LOWER (PEPE) FROM DUAL;
Resultado: pepe

UPPER (Columna | Expresin)


Convierte en maysculas las cadenas de caracteres en minsculas.
SELECT UPPER (pepe) FROM DUAL;
Resultado: PEPE

INITCAP (Columna | Expresin)


Convierte la primera letra de cada palabra en maysculas y el resto de letras en
minsculas.
SELECT INITCAP (hola pepe) FROM DUAL;
Resultado: Hola Pepe

FUNCIONES DE MANIPULACIN DE CADENAS DE CARACTERES

CONCAT (Columna1 | Expresin1, Columna2 | Expresin2 )


Concatena dos cadenas de caracteres. Es equivalente al operador concatenacin ||
SELECT CONCAT (hola, Pepe) FROM DUAL;
Resultado: holaPepe

SUBSTR (Columna | Expresin, m , n )


Devuelve la subcadena especificada comenzando por el carcter de posicin m y con n
caracteres de longitud. Si m es negativo la cuenta comienza por el final dela cadena de
caracteres. Si n se omite se devuelven todos los caracteres del final de la cadena.
SELECT SUBSTR (perfeccion, 2 , 3 ) FROM DUAL;
Resultado: erf
SELECT SUBSTR (perfeccion, -2 , 2 ) FROM DUAL;
Resultado: on

LENGTH (Columna | Expresin )


Devuelve la longitud de una cadena de caracteres.
SELECT LENGTH (hola) FROM DUAL;
Resultado: 4

INSTR (Columna | Expresin, m )


Devuelve la posicin numrica del carcter nombrado.
SELECT INSTR (hola, l) FROM DUAL;
Resultado: 3

LPAD (Columna | Expresin, n, string)


Justifica a la derecha con un ancho de n y rellena con un carcter o string los espacios
vacos.
SELECT LPAD (hola, 8, *) FROM DUAL;
Resultado: ****hola

RPAD (Columna | Expresin, n, string)


Justifica a la izquierda con un ancho de n y rellena con un carcter o string los espacios
vacos.
SELECT RPAD (hola, 8, *) FROM DUAL;
Resultado: hola****
FUNCIONES NUMRICAS

NLS_NUMERIC_CHARACTERS = "DG"
D representa el caracter decimal
G el caracter separador de miles
ALTER SESSION SET NLS_NUMERIC_CHARACTERS="/ *";
SELECT TO_CHAR(SAL,'999G999D999') FROM EMP;
800/000
1*600/000
1*250/000
2*975/000

NLS_CURRENCY
Especifica el smbolo de la moneda local
ALTER SESSION SET NLS_CURRENCY= 'Euros';
SELECT TO_CHAR ( 123, '999L') FROM DUAL;
123Euros

ROUND (Columna | Expresin, n)


Redondea a n posiciones decimales. Si se omite n no se redondea con lugares
decimales. Si n es negativo los nmeros a la izquierda del punto decimal se redondean.
SELECT ROUND (45.923 , 2), ROUND (45.923 , 0), ROUND (45.923 , -1)
FROM DUAL;
Resultado: 45.92 , 46 , 50

TRUNC (Columna | Expresin, n)


Trunca la columna o valor a la ensima posicin decimal. Si se omite n, sin lugares
decimales. Si n es negativo, los nmeros a la izquierda del punto decimal se truncan a
cero.
SELECT TRUNC (45.923 , 2), TRUNC (45.923), TRUNC (45.923 , -1) FROM DUAL;
Resultado: 45.92 , 45 , 40
MOD ( m , n)
Devuelve el resto de la divisin de m por n.
SELECT MOD (1600, 300) FROM DUAL;
Resultado: 100

FECHAS
Oracle almacena fechas en un formato numrico interno:
siglo, ao, mes da, hora, minutos, segundos.
El formato de fecha por defecto es DD-MON-YY

SYSDATE
Funcin que devuelve la fecha y la hora actuales del sistema.
SELECT SYSDATE FROM DUAL;
Resultado: 28/02/03

NLS_DATE_LANGUAGE
Por defecto al iniciar nuestra sesin el idioma definido para la fecha es el espaol.
Podemos definir otro idioma cualquiera:
SQL > ALTER SESSION SET NLS_DATE_LANGUAGE = French;
SQL > ALTER SESSION SET NLS_DATE_LANGUAGE = English;

NLS_DATE_FORMAT
Podemos cambiar el valor por omisin para la fecha mediante este parametro. Por
ejempo si queremos que la fecha nos aparezca como da/ nombre_mes/ ao
SQL > ALTER SESSION SET NLS_DATE_FORMAT = DD/ month / YYYY;
Si queremos que nos aparezca adems la hora
SQL > ALTER SESSION SET
NLS_DATE_FORMAT = DD/ month / YYYY HH24:MI:SS ;
OPERADORES ARITMETICOS DE FECHAS

SUMAR UN NUMERO A UNA FECHA


Agrega una cantidad de das a una fecha.
SELECT TO_DATE (01012000) +14 FROM DUAL;
Resultado: 15/01/2000

RESTAR UN NUMERO A UNA FECHA


Resta una cantidad de das a una fecha.
SELECT TO_DATE (11012000) -10 FROM DUAL;
Resultado: 01/01/2000

SUMAR HORAS A UNA FECHA


Agrega una cantidad de horas a una fecha.
SELECT TO_DATE (01012000) +26/24 FROM DUAL;
Resultado: 02/01/2000

RESTAR DOS FECHAS


Nos da la cantidad de dias entre dos fechas
SELECT TO_DATE (11012000) - TO_DATE (09012000) FROM DUAL;
Resultado: 2

FUNCIONES DE FECHA
MONTHS_BETWEEN ( fecha1, fecha2)
Nos devuelve el nmero de meses entre dos fechas
SELECT MONTHS_BETWEEN (01-SEP-1995, 11/JAN/94) FROM DUAL;
Resultado: 16.6774194

ADD_MONTHS ( fecha , n )
Agrega n meses a la fecha
SELECT ADD_MONTHS (01-ENE-1994, 6) FROM DUAL;
Resultado: 11- JUL -1994
NEXT_DAY ( fecha, dia_semana)
Devuelve la fecha del dia especificado despus de una fecha.
SELECT NEXT_DAY (01-SEP-1995, Miercoles) FROM DUAL;
Resultado: 08-SEP-1995

LAST_DAY ( fecha)
Devuelve el ltimo da del mes.
SELECT LAST_DAY (01-SEP-1995) FROM DUAL;
Resultado: 30-SEP-1995

ROUND ( fecha, formato)


Si no especificamos ningn formato devuelve la fecha del primer dia del mes contenido
en la fecha.
Si el formato es MONTH, encuentra el primer da del del prximo mes.
SELECT ROUND (TO_DATE(13071995, MONTH) FROM DUAL;
Resultado: 01-AUG-1995
Si el formato es YEAR, encuentra el primer da del ao.
SELECT ROUND (25-JUL-1995, YEAR) FROM DUAL
Resultado: 01-JAN-1996

TRUNC ( fecha, formato)


Devuelve la fecha con la posicin del da truncado en la unidad especificada por el
formato. Si se omite el formato la fecha se trunca en el da ms prximo.
SELECT TRUNC (25-JUL-1995, MONTH) FROM DUAL;
Resultado: 01-JUL-1995
CONVERSIN ENTRE TIPOS DE DATOS

TO_CHAR ( fecha, [formato]] )


Convierte un nmero o fecha en una cadena de caracteres varchar2 con el modelo de
formato especificado.
SELECT TO_CHAR ( SYSDATE, MM / YY ) FROM DUAL;
Resultado: 02/03
SELECT TO_CHAR ( SYSDATE, fmMM / YY ) FROM DUAL;
Resultado: 2/03 ( fm suprime ceros a la izquierda)
SELECT TO_CHAR ( SYSDATE, HH24:MI:SS AM) FROM DUAL;
Resultado: 15:45:32 PM
SELECT TO_CHAR ( SYSDATE, DD de MONTH ) FROM DUAL;
Resultado: 11 de febrero
SELECT TO_CHAR ( SYSDATE, DDSP de MONTH ) FROM DUAL;
Resultado: once de febrero

TO_CHAR ( nmero, [formato]] )


Convierte un nmero en una cadena de caracteres varchar2 con el modelo de formato
especificado.
SELECT TO_CHAR ( 3000 , $99,999 ) FROM DUAL;
Resultado: $ 3,000

TO_NUMBER (char)
Convierte una cadena de caracteres a un formato numrico.
SELECT TO_NUMBER ('1234') + TO_NUMBER ('12,34') FROM DUAL;
Resultado: 1246,34

TO_DATE ( char, [formato]])


Convierte una cadena de caracteres a un formato de fecha
SELECT TO_DATE ( '22 FEBRERO DE 1999', 'DD MONTH "DE" YYYY') FROM
DUAL; 22/02/99
SELECT TO_DATE ( '220399') FROM DUAL;
22/03/99
NVL ( expr1, expr2)
Convierte un nulo a un valor
expr1: es la columna que podra contener el valor nulo.
expr2: es el valor para convertir el valor nulo
SQL> SELECT COMM, NVL(COMM,0) FROM EMP;

DECODE ( columna/expresin, valor 1, resultado 1,


valor 2, resultado 2,
...
valor_por_defecto )
Es parecido al IF-THEN-ELSE. busca el valor de una columna o expresin y lo
compara con los diferentes valores 1,2...n si coincide devuelve el resultado
correspondiente, si no devuelve el valor por defecto.
SELECT DECODE ('Adulto', 'Adulto', 1500, 'Nio', 500, 2000) FROM DUAL;
1500
SELECT DECODE ('Nio', 'Adulto', 1500, 'Nio', 500, 2000) FROM DUAL;
500
SELECT DECODE ('Otros', 'Adulto', 1500, 'Nio', 500, 2000) FROM DUAL;
2000

ANIDAMIENTO DE FUNCIONES
Las funciones a nivel de fila pueden anidarse ( usar unas dentro de otras).
Las funciones anidadas son evaluadas desde el nivel ms interno al ms externo.
buscamos la fecha del lunes despues de pasados 6 meses del dia actual:
SELECT TO_CHAR (NEXT_DAY(ADD_MONTHS(SYSDATE,6), 'LUNES'), 'Day,
month, yyyy') FROM DUAL;
OTRAS FUNCIONES

DUMP(cadena[ ,formato, comienzo, longitud]])


Visualiza el valor de la cadena de caracteres en formato de datos interno: ASCII, octal,
hexadecimal o en formato de carcter.
el argumento formato puede tomar los siguientes valores:
8 devuelve el resultado en octal
10 devuelve el resultado en decimal.
16 devuelve el resultado en hexadecimal.
17 devuelve el resultado en carcter.
comienzo es la posicin de inicio de la cadena
longitud es el nmero de caracteres

SELECT DUMP('PEPE', 16) FROM DUAL;


Typ=96 Len=4: 50,45,50,45

USER
Devuelve el nombre del usuario actual.
SELECT USER FROM DUAL;
SCOTT
SHOW USER
el usuario es "SCOTT"

UID
Devuelve el identificador del usuario actual. Al crear un usuario Oracle le asigna un
nmero.
SELECT UID FROM DUAL;
18

VSIZE (expresin)
Devuelve el nmero de bytes que ocupa expresin. Si la expresin es nulo, la funcin
devuelve nulo.
SELECT VSIZE('HOLA') FROM DUAL; 4
VSIZE (expresin)
Devuelve el nmero de bytes que ocupa expresin. Si la expresin es nulo, la funcin
devuelve nulo.
SELECT VSIZE('HOLA') FROM DUAL; 4

ASCII(cadena)
Devuelve el valor ascii de la primera letra de la cadena
SELECT ASCII('HOLA') FROM DUAL; 72

TRANSLATE (cadena1, cadena2, cadena3)


Convierte caracteres de una cadena en caracteres diferentes. Devuelve cadena1 con los
caracteres encontrados en cadena2 y sustituidos por los caracteres de cadena 3.
SELECT TRANSLATE ('SQLPLUS' , 'SQL' , 123)
123P3U1

REPLACE (cadena, cadena_busqueda [,cadena sustitucin )


Sustituye un caracter o varios caracteres de una cadena por 0 o ms caracteres. devuelve
cadena con cada ocurrencia de cadena _busqueda sustituida por cadena_sustitucin.
SELECT REPLACE (BLANCO Y NEGRO, 'O' , 'A' ) FROM DUAL;
BLANCA Y NEGRA
SELECT REPLACE (BLANCO Y NEGRO, 'O' ) FROM DUAL;
BLANC Y NEGR

LTRIM (cadena, [carsup) / RTRIM


Suprime un conjunto de caracteres a la izquierda ( RTRIM a la derecha) de la cadena.
carsup es el conjunto de caracteres que se van a suprimir. Devuelve cadena con el
conjunto de caracteres carsup omitidos por la izquierda de la cadena.
Si queremos eliminar blancos a la izquierda:
SELECT LTRIM ( hola) FROM DUAL;
hola
SELECT LTRIM (XEhola, 'XE') FROM DUAL;
hola
FUNCIONES DE LISTAS

GREATEST( valor1, valor2, ...) / LAST( valor1, valor2, ...)


Obtiene el mayor/menor valor de la lista. En caso de ser caracteres obtiene el mayor /
menor nombre alfabtico de la lista.
SELECT GREATEST ( 1, 2, 4, 12, 11, 7 ) FROM DUAL; 12
SELECT GREATEST ( 'pepe', ' juan', 'pedro' ) FROM DUAL; pepe
SELECT GREATEST ( 'pp', ' pa', 'pz' ) FROM DUAL; pz

FUNCIONES MATEMATICAS

ABS (n)
Devuelve el valor absoluto
CEIL (n)
Obtiene el valor entero inmediatamente superior o igual a n
FLOOR (n)
Obtiene el valor entero inmediatamente inferior o igual a n
POWER (m, exponente)
Calcula la potencia de un nmero
SIGN (valor)
Indica el signo del valor
SQRT(n)
Calcula la raz cuadrada
TIPOS DE JOINS

EQUIJOINS NON-EQUIJOINS OUTER JOIN SELF JOIN

EQUIJOINS O JOINS SIMPLES


Sirven para consultar datos de dos tablas que poseen atributos comunes.(normalmente
las claves principales y ajenas)
SELECT tabla1.columna, tabla 2. columna,....
FROM tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna2 (condicin de join)
Columna1 y columna2 son las columnas comunes a las dos tablas.
Ejemplo:
SELECT emp.empno, emp.ename, dept.deptno, dept.loc
FROM emp, dept
WHERE emp.deptno = dept.deptno

El mismo ejemplo usando alias de tabla:


SELECT e.empno, e.ename, d.deptno, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno

PRODUCTO CARTESIANO
Cuando omitimos la condicin de join o definimos una condicin de join invlida.
Se combinan todas las filas de la primera tabla con todas las de la segunda.
SELECT tabla1.columna, tabla 2. columna,....
FROM tabla1, tabla2
Ejemplo:
SELECT ename, dname
FROM emp, dept;

NOM EQUIJOINS
Para trabajar con tablas que no tienen ningn atributo en comn.
SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
OUTER JOINS
Para ver las filas que no cumplen la condicin de join.
SELECT tabla1.columna, tabla 2. columna,....
FROM tabla1, tabla2
WHERE tabla1.columna1(+) = tabla2.columna2;

SELECT tabla1.columna, tabla 2. columna,....


FROM tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna2 (+);

Ejemplo:

SELECT e.ename, d.deptno, d.dname


FROM emp e, dept d
WHERE e.deptno (+) = d.deptno
AND d.deptno >20
ORDER BY d.deptno

Resultado:

ENAME DEPTNO DNAME


---------- --------- --------------
ALLEN 30 SALES
BLAKE 30 SALES
MARTIN 30 SALES
JAMES 30 SALES
TURNER 30 SALES
WARD 30 SALES
40 OPERATIONS
ENTRADA DE DATOS INTERACTIVO

ACCEPT
Permite dar a una variable de usuario un valor introducido por teclado.
ACC[EPT] variable [NUM[BER] | CHAR] [PROMPT texto | NOPR[OMPT]] [HITE]

HITE hace que los caracteres tecleados por el operador no aparezcan en pantalla.
PROMPT permite visualizar un texto. Dentro del texto puede haber variables de
sustitucin.

ACCEPT mes CHAR PROMPT Introduce un mes:


Introduce un mes: enero
PROMPT El mes tecleado es &mes
El mes tecleado es enero

SELECT TO_CHAR (TO_DATE (&dia/&mes/&ano), DAY, MONTH, YYYY)


DIA, MES AO FROM DUAL;

VARIABLES DEL SISTEMA. COMANDO SET

SQL*Plus trabaja con variables de sistema que definen su entorno.


Estas variables tienen un valor predeterminado que puede cambiarse con la sentencia
SET.
Las variables controlan el ancho de columnas, el tamao de la pagina...

Hay unas 50 variables que pueden controlarse con SET (Consultar el manual de
referencia de SQL*Plus)

Vamos a ver algunas de las ms utilizadas:


SET

Para establecer el valor de una variable de sistema:


SET variable_del_sistema Valor
Para mostrar el valor que tiene una variable:
SHOW variable

AUTOCOMMIT

SET AUTO[COMMIT] {OFF | ON | INMEDIATE }


ON, INMEDIATE : Hace que se ejecute un commit automtico tras cada comando SQL
o bloque PL/SQL
Ejemplos:
SHOW AUTO
SET AUTO ON

HEADING

SET HEA[DING] {OFF | ON }


HEADING controla si las columnas resultado de una consulta aparecen con cabeceras
(ON) o sin ellas (OFF)

LINESIZE

SET LIN[ESIZE] {80 | n }


Con LINESIZE controlamos el nmero de caracteres que se visualizan antes de cambiar
de lnea. Los ttulos de cabecera y los pies de pgina se justifican de acuerdo con esta
longitud.

PAGESIZE

SET PAGES[IZE] {14 | n }


Nmero de lneas que se visualizan por pgina.
PAUSE

SET PAU[SE] {OFF | ON | texto }


Controla el scroll en la visualizacin de informes. Si se quiere parar la visualizacin al
comienzo de cada pgina se debe poner PAUSE a ON. Si queremos que se visualice un
mensaje cada vez que se produzca la pausa sustituimos texto por el mensaje (entre
comillas si es una palabra completa)

NEWPAGE

SET NEW[PAGE] {1 | n }
Nmero de lneas en blanco que se deja al principio de cada pgina.

ECHO

SET ECHO {ON |OFF}


Visualiza cada sentencia antes de su ejecucin. Podemos seguir la ejecucin del fichero
paso a paso.

VERIFY

SET VER[IFY] {OFF | ON }


Sirve para ver o anular los mensajes de valor antiguo y nuevo en las variables de
sustitucin.

Adems de VERIFY existen otras variables del sistema que afectan al funcionamiento
de las variables de sustitucin:

SCAN
Si est OFF no se produce el proceso de sustitucin.
DEFINE
Contiene el carcter que precede a las variables de sustitucin (Por defecto &)
ESCAPE
Define el carcter escape, por defecto \ que, puesto delante del carcter de sustitucin
le quita su significado.
CONCAT
Define el carcter que separa el nombre de una variable de los caracteres que le siguen,
por defecto el punto. & variable.caracteres
VARIABLES DE USUARIO (DEFINE)

DEFINE
DEF[INE] nombre_variable = texto
Define la variable de usuario
DEF[INE] nombre_variable
Muestra el contenido de la variable de usuario
DEF[INE]
Muestra todas las variables de usuario
DEFINE_EDITOR= nombre_del_editor
Fijamos el editor al que llamamos con el comando EDIT

Todas las variables definidas con DEFINE toman siempre valores tipo CHAR.
UNDEFINE
UNDEF[INE] nombre_variable
Elimina la variable de usuario previamente definida.

VARIABLES DE SUSTITUCIN (&)


&variable
Pide el contenido cada vez que la encuentra

SELECT empno as numero, ename as nombre , job as empleo


FROM emp
WHERE ename=UPPER(&nombre_empleado);

&&variable
Pide el contenido una sola vez
SELECT &nombre_columna
FROM &nombre_tabla;
&variable . caracteres_a_aadir

Podemos aadir caracteres detrs de una variable de sustitucin


INFORMES

Podemos dar formato a los resultados de las consultas, obteniendo informes


estructurados. Entre otras cosas podemos definir cabeceras y pies de pgina,
dimensionar la pgina, realizar rupturas de control (subtotales y totales)

CABECERAS Y PIES DE PAGINA

TTITLE
Ttulo superior

BTITLE
Ttulo inferior

TTI[TLE] [opciones[texto | variable]...] | [OFF | ON]


Opciones que permiten colocar el ttulo:
Col n en la columna n de la lnea actual
S[KIP] n Saltar n lneas
TAB n Saltar n columnas hacia delante (+n) o hacia atrs (-n)
LE[FT] Alineacin izquierda
CE[NTER] Alineacin centrada
R[IGHT] Alineacin derecha
BOLD Ttulo en negrita
FORMAT cadena_caracteres (permite dar formato al ttulo cuando este es una variable)
TABLAS

CREACIN DE TABLAS

CREATE TABLE
Crea una tabla especificando sus columnas y tipos de datos que contendr cada columna
CREATE TABLE departamento
( deptno NUMBER(2),
dname VARCHAR(14),
loc VARCHAR(14) );
Tabla creada.

DESCRIBE departamento

Name Null? Type


------------------------------- -------- ----
DEPTNO NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(14)
CONSULTAS AL DICCIONARIO DE DATOS

USER_TABLES

Podemos visualizar el tipo de datos que se almacenan en user_tables


DESC SYS.USER_TABLES
Name Null? Type
------------------------------- -------- ----
TABLE_NAME NOT NULL VARCHAR2(30)
TABLESPACE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(30)
IOT_NAME VARCHAR2(30)
PCT_FREE NUMBER
PCT_USED NUMBER
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
LOGGING VARCHAR2(3)
BACKED_UP VARCHAR2(1)
NUM_ROWS NUMBER
BLOCKS NUMBER
EMPTY_BLOCKS NUMBER
AVG_SPACE NUMBER
CHAIN_CNT NUMBER
AVG_ROW_LEN NUMBER
AVG_SPACE_FREELIST_BLOCKS NUMBER
NUM_FREELIST_BLOCKS NUMBER
DEGREE VARCHAR2(10)
INSTANCES VARCHAR2(10)
CACHE VARCHAR2(5)
TABLE_LOCK VARCHAR2(8)
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
PARTITIONED VARCHAR2(3)
IOT_TYPE VARCHAR2(12)
TEMPORARY VARCHAR2(1)
NESTED VARCHAR2(3)
BUFFER_POOL VARCHAR2(7)

Descripcin de tablas propiedad del usuario


SELECT table_name FROM user_tables;
Nos muestra las tablas que tenemos como usuarios ms la ltima tabla que hemos
creado DEPARTAMENTO
TABLE_NAME
------------------------------
ACTIVIDADES
ACTIVIDADES_USUARIOS
BANCOS
BONUS
DEPARTAMENTO
DEPT
EMP
MY_EMPLOYEE
PAGOS
SALGRADE
USUARIOS
USUARIOS_ASOCIADOS

USERS_OBJECTS
Ver los distintos tipos de objetos propiedad del usuario
DESC SYS.USER_OBJECTS

Name Null? Type


------------------------------- -------- ----
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(15)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)

COLUMN OBJECT_NAME FORMAT A30


SELECT DISTINCT object_name, object_type FROM user_objects;

OBJECT_NAME OBJECT_TYPE
------------------------------ ---------------
ACTIVIDADES TABLE
ACTIVIDADES_USUARIOS TABLE
BANCOS TABLE
BONUS TABLE
CLAVE_ALTERNATIVA_USUARIOS INDEX
CLAVE_PRIMARIA_ACTIVIDADES INDEX
CLAVE_PRIMARIA_ACT_USU INDEX
CLAVE_PRIMARIA_BANCOS INDEX
CLAVE_PRIMARIA_PAGOS INDEX
CLAVE_PRIMARIA_USUARIOS INDEX
CLAVE_PRIMARIA_USUARIOS_ASOC INDEX
DEPARTAMENTO TABLE
DEPT TABLE
EMP TABLE
..

USERS_CATALOG
Ver tablas, vistas, sinnimos y secuencias propiedad del usuarios
DESC SYS.USER_CATALOG
Name Null? Type
------------------------------- - ------- ----
TABLE_NAME NOT NULL VARCHAR2(30)
TABLE_TYPE VARCHAR2(11)

SELECT * FROM user_catalog;

TABLE_NAME TABLE_TYPE
------------------------------ -----------
ACTIVIDADES TABLE
ACTIVIDADES_USUARIOS TABLE
BANCOS TABLE
BONUS TABLE
DEPARTAMENTO TABLE
DEPT TABLE
EMP TABLE
MY_EMPLOYEE TABLE
PAGOS TABLE
SALGRADE TABLE
USUARIOS TABLE
USUARIOS_ASOCIADOS TABLE
CREACIN DE UNA TABLA A PARTIR DE UNA SUBCONSULTA
CREATE TABLE dept30
AS
SELECT empno, ename, sal*12 annsal, hiredate
FROM emp
WHERE deptno = 30;

Tabla creada.

DESCRIBE dept30

Name Null? Type


------------------------------- -------- ----
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
ANNSAL NUMBER
HIREDATE DATE

MODIFICACIN DE TABLAS
ALTER TABLE
Podemos aadir una nueva columna, modificar una columna ya existente o dar un valor
por defecto a una nueva columna.
Aadimos una nueva columna job a la tabla dept30
ALTER TABLE dept30
ADD (job VARCHAR2(9));
Tabla modificada.

DESC dept30 Podemos ver como se ha aadido la columna job

Con MODIFY podemos cambiar el tipo de dato de una columna, su tamao y valor por
defecto.
Vamos a modificar la longitud mxima de los caracteres de la columna ename

ALTER TABLE dept30


MODIFY (ename VARCHAR2(15));

Tabla modificada.
ELIMINACIN DE UNA TABLA
DROP TABLE
Cuando eliminamos una tabla se borran todos los datos de la tabla y todos los ndices.
Se realiza un COMMIT (no podremos deshacer el borrado con la sentencia
ROLLBACK)
DROP TABLE dept30;
Tabla borrada

BORRAR LOS REGISTROS DE UNA TABLA


TRUNCATE TABLE
Borra todos los registros de una tabla y libera todo el espacio ocupado por la tabla
No se puede hacer un rollback
TRUNCATE TABLE dept30;
Tabla truncada.
DELETE TABLE
Borra todos los registros de una tabla pero no libera el espacio
DELETE dept30;
6 filas borradas.

AADIR COMENTARIOS A UNA TABLA


COMMENT
Los comentarios se pueden ver a travs de determinadas vistas del diccionario de datos
Podemos aadir comentarios de hasta 2000 bytes

ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS

COMMENT ON TABLE emp IS Contiene datos sobre los empleados;


Comentario creado.

DESC SYS.USER_COL_COMMENTS;

Name Null? Type


------------------------------- - ------- ----
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME NOT NULL VARCHAR2(30)
COMMENTS VARCHAR2(4000)

COLUMN COMMENTS FORMAT A35


SELECT * FROM USER_TAB_COMMENTS;

TABLE_NAME TABLE_TYPE COMMENTS


------------------------------ ----------- ------------- ----------------------
ACTIVIDADES TABLE
ACTIVIDADES_USUARIOS TABLE
BANCOS TABLE
BONUS TABLE
DEPARTAMENTO TABLE
DEPT TABLE
DEPT30 TABLE
EMP TABLE Contiene datos sobre los empleados
MY_EMPLOYEE TABLE
PAGOS TABLE
SALGRADE TABLE
USUARIOS TABLE
USUARIOS_ASOCIADOS TABLE
RESTRICCIONES ( CONSTRAINTS)

Las restricciones se utilizan para prevenir la entrada de datos no vlidos en una tabla y
garantizar reglas de integridad de los datos.

Conviene asignar un nombre a cada restriccin pues en caso contrario oracle genera uno
usando el formato SYS-Cn.

Las restricciones se pueden crear en el momento de crear la tabla o despus de haber


sido creada.

Las restricciones se pueden definir a nivel de tabla o a nivel de columna.

Para ver las restricciones definidas hemos de hacerlo a travs del diccionario de datos.

NOT NULL
Especifica que una columna no puede contener valores nulos.
CREATE TABLE empleados (
empno NUMBER(4),
ename VARCHAR2(10)
CONSTRAINT empleados_ename_nn NOT NULL,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(7)
CONSTRAINT empleados_deptno_nn NOT NULL);
Tabla creada

DESC empleados;
Name Null? Type
-------------------- ----------- -------- ----
EMPNO NUMBER(4)
ENAME NOT NULL VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NOT NULL NUMBER(7)
UNIQUE
Requiere que los valores en una columna o columnas sean unicos.
Las claves UNIQUE permiten la entrada de nulos, a menos que tambien se definan
NOT NULL
CREATE TABLE departamento (
depno NUMBER(2),
dname VARCHAR2(14) ,
loc VARCHAR2(14) ,
CONSTRAINT departamento_dname_uk UNIQUE(depno));
Tabla creada.
VISUALIZACION DE RESTRICCIONES (CONSTRAINTS)
USER_CONSTRAINTS
DESCRIBE SYS.USER_CONSTRAINTS;

Name Null? Type


----------------------------- - -------- ----
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
LAST_CHANGE DATE

SELECT constraint_name, constraint_type, table_name


FROM user_constraints;

CONSTRAINT_NAME C TABLE_NAME
------------------------------ ----- --------------------
SYS_C00598 C ACTIVIDADES
CLAVE_PRIMARIA_ACTIVIDADES P ACTIVIDADES
SYS_C00600 C ACTIVIDADES_USUARIOS
SYS_C00601 C ACTIVIDADES_USUARIOS
CLAVE_PRIMARIA_ACT_USU P ACTIVIDADES_USUARIOS
CLAVE_AJENA_ACT R ACTIVIDADES_USUARIOS
CLAVE_AJENA_USU R ACTIVIDADES_USUARIOS
SYS_C00589 C BANCOS
CLAVE_PRIMARIA_BANCOS P BANCOS
DEPARTAMENTO_DNAME_UK U DEPARTAMENTO
PK_DEPT P DEPT
PK_EMP P EMP
FK_DEPTNO R EMP
EMPLEADOS_ENAME_NN C EMPLEADOS
EMPLEADOS_DEPTNO_NN C EMPLEADOS
.....

La columna Constraint_type (solo vemos C) toma los valores siguientes:

C CHECK
P PRIMARY KEY
R INTEGRIDAD REFERENCIAL
U UNIQUE KEY

Los NULL son restricciones CHECK


USER_CONSTRAINTS

DESCRIBE SYS.USER_CONS_COLUMNS;

Name Null? Type


------------------------------- -------- ---------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER

COLUMN column_name format a30


SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = EMP;

CONSTRAINT_NAME COLUMN_NAME
------------------------------ ------------------------------
FK_DEPTNO DEPTNO
PK_EMP EMPNO

CLAVES PRIMARIAS Y AJENAS


PRIMARY KEY
Definicin de clave primaria. Por defecto al declarar una clave primaria sobre esta se
crea un ndice UNIQUE.
CREATE TABLE departamento (
depno NUMBER(2),
dname VARCHAR2(14) ,
loc VARCHAR2(14) ,
CONSTRAINT departamento_dname_uk UNIQUE(depno)
CONSTRAINT departamento_depno_pk PRIMARY KEY);
Tabla creada.
FOREIGN KEY
Al definir una clave ajena hay que indicarle con REFERENCES que tabla clontiene el
campo que es clave principal .
REFERENCES identifica la tabla y columna en la tabla padre.
ON DELETE CASCADE en caso de ser borrado un registro referenciado en la tabla
padre en todas las hijas se borrara tambien.

CREATE TABLE empleados (


empno NUMBER(4),
ename VARCHAR2(10)
CONSTRAINT empleados_ename_nn NOT NULL,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(7)
CONSTRAINT empleados_deptno_nn NOT NULL,
CONSTRAINT empleados_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno));

Tabla creada.

CONSTRAINT CHECK
CHECK
Define una condicin que debe satisfacer una columna.

CREATE TABLE departamento (


deptno NUMBER(2),
dname VARCHAR2(14) ,
loc VARCHAR2(14) ,
CONSTRAINT departamento_dname_uk UNIQUE(deptno),
CONSTRAINT departamento_deptno_pk PRIMARY KEY (deptno),
CONSTRAINT departamente_deptno_ck
CHECK (deptno BETWEEN 10 AND 99));
Tabla creada.
AADIR, MODIFICAR, ACTIVAR CONSTRAINTS
AADIR UNA CONSTRAINT

ALTER TABLE empleados


ADD CONSTRAINT empleados_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp (empno);

Tabla modificada

ELIMINACION DE UNA CONSTRAINT

ALTER TABLE empleados


DROP CONSTRAINT empleados_mgr_fk;

Tabla modificada

Para borrar la constraint PRIMARY KEY de la tabla departamento y la constraint


FOREIGN KEY de la tabla empleados

ALTER TABLE departamento


DROP PRIMARY KEY CASCADE;

Tabla modificada

DESACTIVAR CONSTRAINTS

ALTER TABLE empleados


DISABLE CONSTRAINT empleados_empno_pk CASCADE;
Tabla modificada

CASCADE desactiva las restricciones de integridad dependientes.

ACTIVAR CONSTRAINTS

ALTER TABLE empleados


ENABLE CONSTRAINT empleados_empno_pk ;

Tabla modificada

CASCADE desactiva las restricciones de integridad dependientes.


VISTAS

Representan un subconjunto de una o mas tablas.

CREACION DE UNA VISTA


CREATE VIEW

CREATE VIEW emp10


AS SELECT empno, ename, job
FROM emp
WHERE deptno=10;

Vista creada.

DESCRIBE emp10

Name Null? Type


------------------------------- -------- ----
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)

La consulta que define la vista no puede contener ORDER BY

CREACION DE UNA VISTA CON ALIAS DE COLUMNA


CREATE VIEW

CREATE VIEW sal30


AS SELECT empno numero_empleado, ename nombre, sal salario
FROM emp
WHERE deptno=30;

Vista creada.

SELECT *
FROM sal30;
LAS VISTAS EN EL DICCIONARIO DE DATOS
USER_VIEWS

DESCRIBE sys.user_views;

Name Null? Type


------------------------------- -------- ---
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
TYPE_TEXT_LENGTH NUMBER
TYPE_TEXT VARCHAR2(4000)
OID_TEXT_LENGTH NUMBER
OID_TEXT VARCHAR2(4000)
VIEW_TYPE_OWNER VARCHAR2(30)
VIEW_TYPE VARCHAR2(30)

SELECT view_name FROM user_views;

VIEW_NAME
------------------------------
EMP10
SAL30

MODIFICACION DE UNA VISTA


CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW emp10
(numero_empleado, nombre_empleado, empleo)
AS SELECT empno, ename , job
FROM emp
WHERE deptno=10;

Vista creada.

OR REPLACE permite que se cree la vista incluso si ya existe con ese nombre

SELECT * FROM emp10;


OPERACIONES LMD SOBRE VISTAS
Podemos realizar operaciones de LMD sobre vistas simples.

No se puede eliminar una fila si la vista contiene:

Funciones de grupo
Una clausula GROUP BY
El comando DISTINCT

No se pueden modificar datos en las vistas si estas contienen

Columnas definidas por expresiones


La pseudocolumna ROWID

No se pueden agregar datos si la vista contiene:

Cualquier columna NOT NULL

CLAUSULA WITH CHECK OPTION


WHITH CHECK OPTION
Esta clausula especifica que los INSERTS y UPDATES realizados a travs de vistas no
pueden crear filas que la vista no puede seleccionar. Permite las restricciones de
integridad y chequeos en la validacin de los datos.
Creamos una vista
CREATE OR REPLACE VIEW emp20
AS SELECT *
FROM emp
WHERE deptno=20
WITH CHECK OPTION CONSTRAINT emp20_ck;

SELECT * FROM emp20;

Intentamos modificar el departamento del empleado 7788

UPDATE emp20
SET deptno=22
WHERE empno=7788;
DENEGAR OPERACIONES LMD
WHITH READ ONLY
Agregando esta opcin en la definicin de la vista nos aseguramos que no ocurran
operaciones de LMD.
CREATE OR REPLACE VIEW emp20
AS SELECT *
FROM emp
WHERE deptno=20
WITH READ ONLY;

ELIMINACION DE UNA VISTA


DROP VIEW
DROP VIEW emp10;

Vista borrada
SECUENCIAS

Las secuencias generan nmeros nicos de forma automtica.


Es un objeto que se puede compartir.
Se suelen usar para crear valores de una clave primaria.

CREAR SECUENCIAS
CREATE SEQUENCE
CREATE SEQUENCE nombre_secuencia
[INCREMENT BY n]
[START WITH n] ( Si se omite empieza por 1)
[MAXVALUE n | NOMAXVALUE] (valor mximo al que llega)
[MINVALUE n | NOMINVALUE] (valor mnimo al que llega)
[CACHE n | NOCACHE] ( especifica cuantos valores sern preasignados
y mantenidos en la memoria del servidor
oracle, por defecto 20)
[CYCLE | NOCYCLE]; (especifica que la secuencia continua generando
valores o no despus de haber llegado a mximo)

Creamos una secuencia para ser usada en la tabla dept

CREATE SEQUENCE dept_deptno


INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCLE;
VERIFICACIN DE SECUENCIAS
USER_ SEQUENCE
DESCRIBE SYS.USER_SEQUENCES;
Name Null? Type
------------------------------- -------- ----
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER

SELECT sequence_name, min_value, max_value, increment_by, last_number


FROM user_sequences;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER


------------------------------ --------- --------- ------------ -----------
DEPT_DEPTNO 1 100 1 91

PSEUDOCOLUMNAS NEXTVAL Y CURRVAL


NEXT_VAL
Retorna el prximo valor disponible de la secuencia.
CURRVAL
Retorna el valor actual de la secuencia.

DESCRIBE SYS.USER_SEQUENCES;
Name Null? Type
------------------------------- -------- ----
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER
USO DE UNA SECUENCIA

INSERT INTO dept


VALUES (dept_deptno.NEXTVAL, MARKETING, SAN DIEGO);

1 fila creada

PODEMOS VER EL VALOR ACTUAL DE UNA SECUENCIA

SELECT dept_deptno.CURRVAL
FROM sys.dual;

MODIFICACIN DE UNA SECUENCIA


ALTER SEQUENCE

ALTER SEQUENCE dept_deptno


INCREMENT BY 1
MAXVALUE 9999
NOCACHE
NOCYCLE;

ELIMINACION DE UNA SECUENCIA


DROP SEQUENCE

DROP SEQUENCE dept_deptno;


INDICES

Aceleran la recuperacin de filas mediante el uso de punteros.


Los ndices se crean automticamente cuando se define una restriccin primary key o
unique en la definicin de una tabla o manualmente.

CREACIN DE UN INDICE
CREATE INDEX

CREATE INDEX nombre_indice


ON tabla (columna..)

CREATE INDEX emp_ename_idx


ON emp (ename);

VERIFICACION DE INDICES
USER_INDEXES

DESCRIBE SYS.USER_INDEXES;

Name Null? Type


------------------------------- -------- ----
INDEX_NAME NOT NULL VARCHAR2(30)
INDEX_TYPE VARCHAR2(12)
TABLE_OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
TABLE_TYPE VARCHAR2(11)
UNIQUENESS VARCHAR2(9)
TABLESPACE_NAME VARCHAR2(30)
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
PCT_THRESHOLD NUMBER
INCLUDE_COLUMN NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
PCT_FREE NUMBER
LOGGING VARCHAR2(3)
BLEVEL NUMBER
LEAF_BLOCKS NUMBER
DISTINCT_KEYS NUMBER
AVG_LEAF_BLOCKS_PER_KEY NUMBER
AVG_DATA_BLOCKS_PER_KEY NUMBER
CLUSTERING_FACTOR NUMBER
STATUS VARCHAR2(8)
NUM_ROWS NUMBER
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
DEGREE VARCHAR2(40)
INSTANCES VARCHAR2(40)
PARTITIONED VARCHAR2(3)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
BUFFER_POOL VARCHAR2(7)

USER_IND_COLUMNS

DESCRIBE SYS.USER_IND_COLUMNS;
Name Null? Type
------------------------------- -------- ----
INDEX_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
COLUMN_POSITION NOT NULL NUMBER
COLUMN_LENGTH NOT NULL NUMBER

ELIMINACIN DE UN INDICE
DROP INDEX

DROP INDEX nombre_indice;

DROP INDEX emp_ename_idx;


SINONIMOS

Simplifican el acceso a los objetos.


Permiten hacer referencia a una tabla propia o de otro usuario.

CREACIN Y BORRADO DE UN SINONIMO

CREATE [PUBLIC] SYNONYM sinnimo


FOR objeto;

PUBLIC crea un sinnimo accesible a todos los usuarios.

Vamos a crear un sinnimo para la vista dept_sum_vu

CREATE SYNONYM d_sum


FOR dept_sum_vu;

Para borrar un sinnimo

DROP SYNONYM d_sum;

También podría gustarte