Funciones Oracle SQL
Funciones Oracle SQL
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
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
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 ;
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
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,
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
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 SELECT LTRIM (XEhola, 'XE') FROM DUAL; hola hola) FROM DUAL;
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; SELECT GREATEST ( 'pepe', ' juan', 'pedro' ) FROM DUAL; SELECT GREATEST ( 'pp', ' pa', 'pz' ) FROM DUAL; 12 pepe 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 O JOINS SIMPLES Sirven para consultar datos de dos tablas que poseen atributos comunes.(normalmente las claves principales y ajenas) SELECT FROM WHERE tabla1.columna, tabla 2. columna,.... tabla1, tabla2 tabla1.columna1 = tabla2.columna2 (condicin de join)
Columna1 y columna2 son las columnas comunes a las dos tablas. Ejemplo: SELECT FROM WHERE emp.empno, emp.ename, dept.deptno, dept.loc emp, dept emp.deptno = dept.deptno
El mismo ejemplo usando alias de tabla: SELECT FROM WHERE e.empno, e.ename, d.deptno, d.loc emp e, dept d 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 FROM tabla1.columna, tabla 2. columna,.... tabla1, tabla2 Ejemplo: SELECT FROM ename, dname emp, dept;
NOM EQUIJOINS Para trabajar con tablas que no tienen ningn atributo en comn. SELECT e.ename, e.sal, s.grade
FROM WHERE
OUTER JOINS Para ver las filas que no cumplen la condicin de join. SELECT FROM WHERE tabla1.columna, tabla 2. columna,.... tabla1, tabla2 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 BLAKE MARTIN JAMES TURNER WARD 30 SALES 30 SALES 30 SALES 30 SALES 30 SALES 30 SALES 40 OPERATIONS
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;
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)
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
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
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)
TTI[TLE] [opciones[texto | variable]...] | [OFF | ON] Opciones que permiten colocar el ttulo: Col n S[KIP] n TAB n LE[FT] CE[NTER] R[IGHT] BOLD en la columna n de la lnea actual Saltar n lneas Saltar n columnas hacia delante (+n) o hacia atrs (-n) Alineacin izquierda Alineacin centrada Alineacin derecha 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 dname loc Tabla creada. NUMBER(2), VARCHAR(14), VARCHAR(14) );
DESCRIBE departamento
Null? --------
USER_TABLES
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 ------------------------------OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED Null? -------Type ---VARCHAR2(128) VARCHAR2(30) NUMBER NUMBER VARCHAR2(15) DATE DATE VARCHAR2(19) VARCHAR2(7) VARCHAR2(1) VARCHAR2(1)
USERS_CATALOG Ver tablas, vistas, sinnimos y secuencias propiedad del usuarios DESC SYS.USER_CATALOG
Name ------------------------------- TABLE_NAME TABLE_TYPE Null? ------NOT NULL Type ---VARCHAR2(30) VARCHAR2(11)
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 ------------------------------EMPNO ENAME ANNSAL HIREDATE Null? -------Type ---NUMBER(4) VARCHAR2(10) NUMBER 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 ADD Tabla modificada. dept30 (job VARCHAR2(9));
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
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 Tabla borrada dept30;
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 Tabla truncada. DELETE TABLE Borra todos los registros de una tabla pero no libera el espacio DELETE dept30; 6 filas borradas. dept30;
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 ------------------------------- TABLE_NAME COLUMN_NAME COMMENTS Null? ------NOT NULL NOT NULL Type ---VARCHAR2(30) VARCHAR2(30) VARCHAR2(4000)
SELECT * FROM USER_TAB_COMMENTS; TABLE_NAME -----------------------------ACTIVIDADES ACTIVIDADES_USUARIOS BANCOS BONUS DEPARTAMENTO DEPT DEPT30 EMP MY_EMPLOYEE PAGOS SALGRADE USUARIOS USUARIOS_ASOCIADOS TABLE_TYPE ----------- ------------TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE COMMENTS ----------------------
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 -------------------EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO Null? ----------NOT NULL Type -------- ---NUMBER(4) VARCHAR2(10) VARCHAR2(9) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(7)
NOT NULL
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.
SELECT FROM
CONSTRAINT_NAME -----------------------------SYS_C00598 CLAVE_PRIMARIA_ACTIVIDADES SYS_C00600 SYS_C00601 CLAVE_PRIMARIA_ACT_USU CLAVE_AJENA_ACT CLAVE_AJENA_USU SYS_C00589 CLAVE_PRIMARIA_BANCOS DEPARTAMENTO_DNAME_UK PK_DEPT PK_EMP FK_DEPTNO EMPLEADOS_ENAME_NN EMPLEADOS_DEPTNO_NN .....
La columna Constraint_type (solo vemos C) toma los valores siguientes: C P R U CHECK PRIMARY KEY INTEGRIDAD REFERENCIAL UNIQUE KEY
COLUMN column_name format a30 SELECT constraint_name, column_name FROM user_cons_columns WHERE table_name = EMP;
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 ENABLE CONSTRAINT Tabla modificada CASCADE desactiva las restricciones de integridad dependientes. empleados empleados_empno_pk ;
VISTAS
CREACION DE UNA VISTA CREATE VIEW CREATE VIEW AS SELECT FROM WHERE Vista creada. DESCRIBE emp10
Name ------------------------------EMPNO ENAME JOB Null? -------Type ---NUMBER(4) VARCHAR2(10) VARCHAR2(9)
CREACION DE UNA VISTA CON ALIAS DE COLUMNA CREATE VIEW CREATE VIEW AS SELECT FROM WHERE Vista creada. SELECT * FROM sal30; sal30 empno numero_empleado, ename nombre, sal salario emp deptno=30;
DESCRIBE sys.user_views;
Name ------------------------------VIEW_NAME TEXT_LENGTH TEXT TYPE_TEXT_LENGTH TYPE_TEXT OID_TEXT_LENGTH OID_TEXT VIEW_TYPE_OWNER VIEW_TYPE Null? -------NOT NULL Type --VARCHAR2(30) NUMBER LONG NUMBER VARCHAR2(4000) NUMBER VARCHAR2(4000) VARCHAR2(30) VARCHAR2(30)
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
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 AS SELECT * FROM emp WHERE deptno=20 WITH READ ONLY; emp20
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) (valor mximo al que llega) (valor mnimo al que llega)
( 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;
NOT NULL
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 ------------------------------SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER Null? -------NOT NULL Type ---VARCHAR2(30) NUMBER NUMBER NUMBER VARCHAR2(1) VARCHAR2(1) NUMBER NUMBER
NOT NULL
USO DE UNA SECUENCIA INSERT INTO VALUES 1 fila creada PODEMOS VER EL VALOR ACTUAL DE UNA SECUENCIA SELECT FROM dept_deptno.CURRVAL sys.dual; dept (dept_deptno.NEXTVAL, MARKETING, SAN DIEGO);
MODIFICACIN DE UNA SECUENCIA ALTER SEQUENCE ALTER SEQUENCE dept_deptno INCREMENT BY 1 MAXVALUE 9999 NOCACHE NOCYCLE;
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.
CREATE INDEX ON
DESCRIBE SYS.USER_INDEXES;
Name ------------------------------INDEX_NAME INDEX_TYPE TABLE_OWNER TABLE_NAME TABLE_TYPE UNIQUENESS TABLESPACE_NAME INI_TRANS MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE PCT_THRESHOLD INCLUDE_COLUMN FREELISTS FREELIST_GROUPS PCT_FREE LOGGING Null? -------NOT NULL NOT NULL NOT NULL Type ---VARCHAR2(30) VARCHAR2(12) VARCHAR2(30) VARCHAR2(30) VARCHAR2(11) VARCHAR2(9) VARCHAR2(30) NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR2(3)
BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY CLUSTERING_FACTOR STATUS NUM_ROWS SAMPLE_SIZE LAST_ANALYZED DEGREE INSTANCES PARTITIONED TEMPORARY GENERATED BUFFER_POOL
NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR2(8) NUMBER NUMBER DATE VARCHAR2(40) VARCHAR2(40) VARCHAR2(3) VARCHAR2(1) VARCHAR2(1) VARCHAR2(7)
SINONIMOS
Simplifican el acceso a los objetos. Permiten hacer referencia a una tabla propia o de otro usuario.
PUBLIC crea un sinnimo accesible a todos los usuarios. Vamos a crear un sinnimo para la vista dept_sum_vu
d_sum dept_sum_vu;