funciones oracle sql

41
FUNCIONES SQL ORACLE FUNCIONES DE CONVERSIÓN DE CADENAS DE CARACTERES LOWER (Columna | Expresión) Convierte en minúsculas las cadenas de caracteres en mayúsculas. SELECT LOWER (‘PEPE’) FROM DUAL; Resultado: pepe UPPER (Columna | Expresión) Convierte en mayúsculas las cadenas de caracteres en minúsculas. SELECT UPPER (‘pepe’) FROM DUAL; Resultado: PEPE INITCAP (Columna | Expresión) Convierte la primera letra de cada palabra en mayúsculas y el resto de letras en minúsculas. SELECT INITCAP (‘hola pepe’) FROM DUAL; Resultado: Hola Pepe FUNCIONES DE MANIPULACIÓN DE CADENAS DE CARACTERES CONCAT (Columna1 | Expresión1, Columna2 | Expresión2 ) Concatena dos cadenas de caracteres. Es equivalente al operador concatenación || SELECT CONCAT (‘hola’, ‘Pepe’) FROM DUAL; Resultado: holaPepe SUBSTR (Columna | Expresión, m , n ) Devuelve la subcadena especificada comenzando por el carácter de posición 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

Upload: ricardo-pezo-cortes

Post on 12-Mar-2015

1.647 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Funciones Oracle SQL

FUNCIONES SQL ORACLE

FUNCIONES DE CONVERSIÓN DE CADENAS DE CARACTERES

LOWER (Columna | Expresión)

Convierte en minúsculas las cadenas de caracteres en mayúsculas.

SELECT LOWER (‘PEPE’) FROM DUAL;

Resultado: pepe

UPPER (Columna | Expresión)

Convierte en mayúsculas las cadenas de caracteres en minúsculas.

SELECT UPPER (‘pepe’) FROM DUAL;

Resultado: PEPE

INITCAP (Columna | Expresión)

Convierte la primera letra de cada palabra en mayúsculas y el resto de letras en

minúsculas.

SELECT INITCAP (‘hola pepe’) FROM DUAL;

Resultado: Hola Pepe

FUNCIONES DE MANIPULACIÓN DE CADENAS DE CARACTERES

CONCAT (Columna1 | Expresión1, Columna2 | Expresión2 )

Concatena dos cadenas de caracteres. Es equivalente al operador concatenación ||

SELECT CONCAT (‘hola’, ‘Pepe’) FROM DUAL;

Resultado: holaPepe

SUBSTR (Columna | Expresión, m , n )

Devuelve la subcadena especificada comenzando por el carácter de posición 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

Page 2: Funciones Oracle SQL

SELECT SUBSTR (‘perfeccion’, -2 , 2 ) FROM DUAL;

Resultado: on

LENGTH (Columna | Expresión )

Devuelve la longitud de una cadena de caracteres.

SELECT LENGTH (‘hola’) FROM DUAL;

Resultado: 4

INSTR (Columna | Expresión, m )

Devuelve la posición numérica del carácter nombrado.

SELECT INSTR (‘hola’, ‘l’) FROM DUAL;

Resultado: 3

LPAD (Columna | Expresión, n, ‘string’)

Justifica a la derecha con un ancho de n y rellena con un carácter o string los espacios

vacíos.

SELECT LPAD (‘hola’, 8, ‘*’) FROM DUAL;

Resultado: ****hola

RPAD (Columna | Expresión, n, ‘string’)

Justifica a la izquierda con un ancho de n y rellena con un carácter o string los espacios

vacíos.

SELECT RPAD (‘hola’, 8, ‘*’) FROM DUAL;

Resultado: hola****

Page 3: Funciones Oracle SQL

FUNCIONES NUMÉRICAS

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 símbolo de la moneda local

ALTER SESSION SET NLS_CURRENCY= 'Euros';

SELECT TO_CHAR ( 123, '999L') FROM DUAL;

123Euros

ROUND (Columna | Expresión, n)

Redondea a n posiciones decimales. Si se omite n no se redondea con lugares

decimales. Si n es negativo los números 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 | Expresión, n)

Trunca la columna o valor a la enésima posición decimal. Si se omite n, sin lugares

decimales. Si n es negativo, los números 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

Page 4: Funciones Oracle SQL

MOD ( m , n)

Devuelve el resto de la división de m por n.

SELECT MOD (1600, 300) FROM DUAL;

Resultado: 100

FECHAS

Oracle almacena fechas en un formato numérico interno:

siglo, año, mes día, hora, minutos, segundos.

El formato de fecha por defecto es DD-MON-YY

SYSDATE

Función 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 sesión el idioma definido para la fecha es el español.

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 omisión para la fecha mediante este parametro. Por

ejempo si queremos que la fecha nos aparezca como día/ nombre_mes/ año

SQL > ALTER SESSION SET NLS_DATE_FORMAT = ‘DD/ month / YYYY’;

Si queremos que nos aparezca además la hora

SQL > ALTER SESSION SET

NLS_DATE_FORMAT = ‘DD/ month / YYYY HH24:MI:SS ’;

Page 5: Funciones Oracle SQL

OPERADORES ARITMETICOS DE FECHAS

SUMAR UN NUMERO A UNA FECHA

Agrega una cantidad de días a una fecha.

SELECT TO_DATE (‘01012000’) +14 FROM DUAL;

Resultado: 15/01/2000

RESTAR UN NUMERO A UNA FECHA

Resta una cantidad de días 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 número 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

Page 6: Funciones Oracle SQL

NEXT_DAY ( fecha, ‘dia_semana’)

Devuelve la fecha del dia especificado después de una fecha.

SELECT NEXT_DAY (’01-SEP-1995’, ‘Miercoles’) FROM DUAL;

Resultado: 08-SEP-1995

LAST_DAY ( fecha)

Devuelve el último día del mes.

SELECT LAST_DAY (’01-SEP-1995’) FROM DUAL;

Resultado: 30-SEP-1995

ROUND ( fecha, ‘formato’)

Si no especificamos ningún formato devuelve la fecha del primer dia del mes contenido

en la fecha.

Si el formato es MONTH, encuentra el primer día del del próximo mes.

SELECT ROUND (TO_DATE(’13071995’, ‘MONTH’) FROM DUAL;

Resultado: 01-AUG-1995

Si el formato es YEAR, encuentra el primer día del año.

SELECT ROUND (’25-JUL-1995’, ‘YEAR’) FROM DUAL

Resultado: 01-JAN-1996

TRUNC ( fecha, ‘formato’)

Devuelve la fecha con la posición del día truncado en la unidad especificada por el

formato. Si se omite el formato la fecha se trunca en el día más próximo.

SELECT TRUNC (’25-JUL-1995’, ‘MONTH’) FROM DUAL;

Resultado: 01-JUL-1995

Page 7: Funciones Oracle SQL

CONVERSIÓN ENTRE TIPOS DE DATOS

TO_CHAR ( fecha, [‘formato’ ]]]] )

Convierte un número 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 ( número, [‘formato’ ]]]] )

Convierte un número 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 numérico.

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

Page 8: Funciones Oracle SQL

NVL ( expr1, expr2)

Convierte un nulo a un valor

expr1: es la columna que podría contener el valor nulo.

expr2: es el valor para convertir el valor nulo

SQL> SELECT COMM, NVL(COMM,0) FROM EMP;

DECODE ( columna/expresión, valor 1, resultado 1,

valor 2, resultado 2,

...

valor_por_defecto )

Es parecido al IF-THEN-ELSE. busca el valor de una columna o expresión 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, 'Niño', 500, 2000) FROM DUAL;

1500

SELECT DECODE ('Niño', 'Adulto', 1500, 'Niño', 500, 2000) FROM DUAL;

500

SELECT DECODE ('Otros', 'Adulto', 1500, 'Niño', 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 más interno al más 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;

Page 9: Funciones Oracle SQL

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 carácter.

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 carácter.

comienzo es la posición de inicio de la cadena

longitud es el número 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

número.

SELECT UID FROM DUAL;

18

VSIZE (expresión)

Devuelve el número de bytes que ocupa expresión. Si la expresión es nulo, la función

devuelve nulo.

SELECT VSIZE('HOLA') FROM DUAL; 4

Page 10: Funciones Oracle SQL

VSIZE (expresión)

Devuelve el número de bytes que ocupa expresión. Si la expresión es nulo, la función

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 sustitución )

Sustituye un caracter o varios caracteres de una cadena por 0 o más caracteres. devuelve

cadena con cada ocurrencia de cadena _busqueda sustituida por cadena_sustitución.

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

Page 11: Funciones Oracle SQL

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 alfabético 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 número

SIGN (valor)

Indica el signo del valor

SQRT(n)

Calcula la raíz cuadrada

Page 12: Funciones Oracle SQL

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 (condición 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 condición de join o definimos una condición de join inválida.

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 ningún atributo en común.

SELECT e.ename, e.sal, s.grade

Page 13: Funciones Oracle SQL

FROM emp e, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

OUTER JOINS

Para ver las filas que no cumplen la condición 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

Page 14: Funciones Oracle SQL

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

sustitución.

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 AÑO ” 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 tamaño 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 más utilizadas:

Page 15: Funciones Oracle SQL

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 automático 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 número de caracteres que se visualizan antes de cambiar de línea. Los títulos de cabecera y los pies de página se justifican de acuerdo con esta longitud.

PAGESIZE SET PAGES[IZE] {14 | n }

Número de líneas que se visualizan por página.

Page 16: Funciones Oracle SQL

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

Controla el scroll en la visualización de informes. Si se quiere parar la visualización al comienzo de cada página 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 }

Número de líneas en blanco que se deja al principio de cada página.

ECHO SET ECHO {ON |OFF}

Visualiza cada sentencia antes de su ejecución. Podemos seguir la ejecución 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 sustitución.

Además de VERIFY existen otras variables del sistema que afectan al funcionamiento de las variables de sustitución:

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

Page 17: Funciones Oracle SQL

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 SUSTITUCIÓN (&)

&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_añadir

Podemos añadir caracteres detrás de una variable de sustitución

Page 18: Funciones Oracle SQL

INFORMES

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

estructurados. Entre otras cosas podemos definir cabeceras y pies de página,

dimensionar la página, realizar rupturas de control (subtotales y totales)

CABECERAS Y PIES DE PAGINA

TTITLE Título superior

BTITLE

Título inferior

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

Opciones que permiten colocar el título:

Col n en la columna n de la línea actual

S[KIP] n Saltar n líneas

TAB n Saltar n columnas hacia delante (+n) o hacia atrás (-n)

LE[FT] Alineación izquierda

CE[NTER] Alineación centrada

R[IGHT] Alineación derecha

BOLD Título en negrita

FORMAT cadena_caracteres (permite dar formato al título cuando este es una variable)

Page 19: Funciones Oracle SQL

TABLAS

CREACIÓN 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)

Page 20: Funciones Oracle SQL

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)

Descripción de tablas propiedad del usuario

Page 21: Funciones Oracle SQL

SELECT table_name FROM user_tables;

Nos muestra las tablas que tenemos como usuarios más 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

Page 22: Funciones Oracle SQL

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, sinónimos 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

Page 23: Funciones Oracle SQL

CREACIÓN 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 MODIFICACIÓN DE TABLAS

ALTER TABLE

Podemos añadir una nueva columna, modificar una columna ya existente o dar un valor

por defecto a una nueva columna.

Añadimos una nueva columna ‘job’ a la tabla dept30

ALTER TABLE dept30 ADD (job VARCHAR2(9)); Tabla modificada.

DESC dept30 Podemos ver como se ha añadido la columna job

Con MODIFY podemos cambiar el tipo de dato de una columna, su tamaño y valor por

defecto.

Vamos a modificar la longitud máxima de los caracteres de la columna ename

ALTER TABLE dept30 MODIFY (ename VARCHAR2(15));

Tabla modificada.

Page 24: Funciones Oracle SQL

ELIMINACIÓN 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. AÑADIR COMENTARIOS A UNA TABLA

COMMENT

Los comentarios se pueden ver a través de determinadas vistas del diccionario de datos Podemos añadir 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

Page 25: Funciones Oracle SQL

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

Page 26: Funciones Oracle SQL

RESTRICCIONES ( CONSTRAINTS)

Las restricciones se utilizan para prevenir la entrada de datos no válidos en una tabla y garantizar reglas de integridad de los datos. Conviene asignar un nombre a cada restricción 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 después 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 través 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)

Page 27: Funciones Oracle SQL

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.

Page 28: Funciones Oracle SQL

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

Page 29: Funciones Oracle SQL

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

Definición 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.

Page 30: Funciones Oracle SQL

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 condición 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.

Page 31: Funciones Oracle SQL

AÑADIR, MODIFICAR, ACTIVAR CONSTRAINTS

AÑADIR 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.

Page 32: Funciones Oracle SQL

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;

Page 33: Funciones Oracle SQL

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;

Page 34: Funciones Oracle SQL

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 través de vistas no

pueden crear filas que la vista no puede seleccionar. Permite las restricciones de

integridad y chequeos en la validación 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;

Page 35: Funciones Oracle SQL

DENEGAR OPERACIONES LMD

WHITH READ ONLY

Agregando esta opción en la definición 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

Page 36: Funciones Oracle SQL

SECUENCIAS

Las secuencias generan números únicos de forma automática.

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 máximo al que llega)

[MINVALUE n | NOMINVALUE ] (valor mínimo al que llega)

[CACHE n | NOCACHE] ( especifica cuantos valores serán preasignados

y mantenidos en la memoria del servidor

oracle, por defecto 20)

[CYCLE | NOCYCLE]; (especifica que la secuencia continua generando

valores o no después de haber llegado a máximo)

Creamos una secuencia para ser usada en la tabla dept CREATE SEQUENCE dept_deptno INCREMENT BY 1 START WITH 91 MAXVALUE 100 NOCACHE NOCYCLE;

Page 37: Funciones Oracle SQL

VERIFICACIÓN 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 próximo 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

Page 38: Funciones Oracle SQL

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;

MODIFICACIÓN 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;

Page 39: Funciones Oracle SQL

INDICES

Aceleran la recuperación de filas mediante el uso de punteros.

Los índices se crean automáticamente cuando se define una restricción primary key o

unique en la definición de una tabla o manualmente.

CREACIÓN 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)

Page 40: Funciones Oracle SQL

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

ELIMINACIÓN DE UN INDICE

DROP INDEX DROP INDEX nombre_indice; DROP INDEX emp_ename_idx;

Page 41: Funciones Oracle SQL

SINONIMOS

Simplifican el acceso a los objetos.

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

CREACIÓN Y BORRADO DE UN SINONIMO

CREATE [PUBLIC] SYNONYM sinónimo FOR objeto; PUBLIC crea un sinónimo accesible a todos los usuarios. Vamos a crear un sinónimo para la vista dept_sum_vu CREATE SYNONYM d_sum FOR dept_sum_vu; Para borrar un sinónimo DROP SYNONYM d_sum;