funciones oracle sql
TRANSCRIPT
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
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****
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
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 ’;
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
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
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
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;
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
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
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
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
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
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:
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.
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
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
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)
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)
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
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
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
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.
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
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 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)
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
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.
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.
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.
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 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;
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
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;
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
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;
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)
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;
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;