Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SQL DEVELOPER
Pgina 1
BA2_ora_01
Pgina 2
BA2_ora_01
CREATE SMALLFILE TABLESPACE " NORTHWIN " DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' SIZE 50M AUTOEXTEND ON NEXT 5M MAXSIZE 70M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS; CREATE SMALLFILE TABLESPACE " NORTHWIN " DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' SIZE 50M AUTOEXTEND ON NEXT 5K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS; ALTER TABLESPACE "NORTHWIN" RENAME TO "NORTHWIN1"; ALTER DATABASE DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' RESIZE 60M;
CREATE USER "U_NORTHWIN" PROFILE "DEFAULT" IDENTIFIED BY "*******" DEFAULT TABLESPACE "NORTHWIN" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "NORTHWIN" ACCOUNT UNLOCK; GRANT "CONNECT" TO "U_NORTHWIN"; GRANT "DBA" TO "U_NORTHWIN"; GRANT "AQ_ADMINISTRATOR_ROLE" TO "U_NORTHWIN"; GRANT "CONNECT", "DBA", "AQ_ADMINISTRATOR_ROLE" TO "U_NORTHWIN";
CREATE USER "Usuario01" PROFILE "DEFAULT" IDENTIFIED BY "oracle" DEFAULT TABLESPACE "UT18-01" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "UT18-01" ACCOUNT UNLOCK; GRANT "CONNECT", "DBA", "AQ_ADMINISTRATOR_ROLE" TO "Usuario01";
Pgina 3
BA2_ora_01
Tipos de datos Oracle CHAR (longitud) Almacena cadenas de caracteres de una longitud fija. El parmetro longitud especifica la longitud de la secuencia. Si se almacena una cadena de longitud ms pequea, se rellena con espacios en el extremo. Por ejemplo, el CHAR (2) puede utilcese para almacenar una cadena de longitud fija de dos caracteres; si C se almacena en un CHAR (2), un solo espacio se agrega al final; CA se almacena como es. VARCHAR2 (longitud) Almacena cadenas de caracteres de una longitud variable. El parmetro longitud especifica la longitud mxima de la secuencia. Por ejemplo, VARCHAR2 (20) se puede utilizar para almacenar una cadena de hasta 20 caracteres en longitud. No se utiliza ningn espacio en el final de cadenas ms pequeas. DATE almacena fechas y hora. El tipo DATE almacena el siglo, todo los 4 dgitos de un ao, el mes, el da, la hora (en formato de 24 horas), el minuto, y el segundo. El tipo DATE se puede utilizar para almacenar fechas y hora entre el 1 de enero de 4712 B.C. y el 31 de diciembre de 4712 A.D. INTEGER almacena nmeros enteros. Un nmero entero no contiene una coma flotante: es un nmero entero, tal como 1, 10, y 115. NUMBER (precisin, escala) Almacena nmeros de coma flotante, pero puede tambin ser utilizado para almacenar nmeros enteros. La precisin es el nmero mximo de los dgitos (a la izquierda y a la derecha del punto decimal, si es utilizado) que se pueden utilizar para el nmero. La precisin mxima apoyada por la base de datos de Oracle es 38. La escala es el nmero mximo de dgitos a la derecha de una coma (si es utilizado). Si ni la precisin ni la escala se especifica, cualquier nmero puede ser almacenado hasta una precisin de 38 dgitos. Cualquier tentativa de almacenar un nmero que exceda la precisin es rechazada por la base de datos. BINARY_FLOAT introducido por la base de datos Oracle 10g, almacena un nmero de coma flotante de simple precisin de 32 bit. BINARY_DOUBLE introducido en la base de datos Oracle 10g, almacena un nmero de coma flotante de precisin doble de 64-bit. Examinando las tablas del almacn CREATE TABLE ClientesOK ( Cliente_id INTEGER CONSTRAINT cliente_PK PRIMARY KEY, Nombre VARCHAR2(10) NOT NULL, Apellido VARCHAR2(10) NOT NULL, Fecha DATE, Telefono VARCHAR2(12) ); Begin Insert into ClientesOK values (1,'John','Brown','01/01/65','800-555-1211'); Insert into ClientesOK values (2,'Cynthia','Green','05/02/68','800-555-1212'); Insert into ClientesOK values (3,'Steve','White','16/03/71','800-555-1213'); Insert into ClientesOK values (4,'Gail','Black',NULL,'800-555-1214'); Insert into ClientesOK values (5,'Doreen','Blue','20/05/70',NULL); End; SELECT * FROM ClientesOK;
Pgina 4
BA2_ora_01
CREATE TABLE Tipos_productos ( Tipo_producto_id INTEGER CONSTRAINT Tipo_producto_PK PRIMARY KEY, Nombre VARCHAR2(10) NOT NULL ); Begin Insert into Tipos_productos values (1, 'Book'); Insert into Tipos_productos values (2,'Video'); Insert into Tipos_productos values (3,'DVD'); Insert into Tipos_productos values (4,'CD'); Insert into Tipos_productos values (5,'Magazine'); End; SELECT * FROM Tipos_productos;
CREATE TABLE Productos ( Producto_id INTEGER CONSTRAINT productos_PK PRIMARY KEY, Tipo_producto_id INTEGER CONSTRAINT productos_FK_Tipo_productos REFERENCES Tipos_productos(Tipo_producto_id), Nombre VARCHAR2(30) NOT NULL, Descripcion VARCHAR2(50), Precio NUMBER(5, 2) ); Begin Insert into Productos values (1,1,'Modern Science','A Description of modern science',19.95); Insert into Productos values (2,1,'Chemistry','Introduction to Chemistry',30); Insert into Productos values (3,2,'Supernova','A star explodes',25.99); Insert into Productos values (4,2,'Tank War','Action movie about a future war', 13.95); End;
CREATE TABLE Adquisicion ( Producto_id INTEGER CONSTRAINT adquisicion_FK_productos REFERENCES productos(Producto_id), Cliente_id INTEGER CONSTRAINT adquisicion_FK_clientes REFERENCES ClientesOk(Cliente_id), cantidad INTEGER NOT NULL, CONSTRAINT adquisicion_PK PRIMARY KEY (Producto_id, Cliente_id) );
Pgina 5
BA2_ora_01
Begin Insert into Adquisicion values (1,1,1); Insert into Adquisicion values (2,1,3); Insert into Adquisicion values (1,4,1); Insert into Adquisicion values (2,2,1); Insert into Adquisicion values (1,3,1); End;
CREATE TABLE Empleados ( Empleado_id INTEGER CONSTRAINT empleados_PK PRIMARY KEY, Encargado_id INTEGER, Nombre VARCHAR2(10) NOT NULL, Apellido VARCHAR2(10) NOT NULL, Titulo VARCHAR2(20), Sueldo NUMBER(6, 0) ); Begin Insert into Empleados values (1, null,'James','Smith','CEO',800000); Insert into Empleados values (2, 1,'Ron', 'Johnson','Sales Manager',600000); Insert into Empleados values (3, 2,'Fred','Hobbs','Salesperson',150000); Insert into Empleados values (4, 2,'Susan','Jones','Salesperson',500000); End; SELECT * FROM Empleados;
CREATE TABLE Grado_sueldos ( Grado_sueldo_id INTEGER CONSTRAINT grado_sueldos_PK PRIMARY KEY, Sueldo_Min NUMBER(6, 0), Sueldo_Max NUMBER(6, 0) ); Begin Insert into Grado_sueldos values (1,1,250000); Insert into Grado_sueldos values (2,250001,500000); Insert into Grado_sueldos values (3,500001,750000); Insert into Grado_sueldos values (4,750001,999999); End;
Pgina 6
BA2_ora_01 ADICIONANDO, MODIFICANDO Y REMOVIENDO FILAS Adicionando una fila a una tabla
DESCRIBE ClientesOK; Name Null? Type ----------------------------------------- -------- -----------CUSTOMER_ID NOT NULL NUMBER(38) FIRST_NAME NOT NULL VARCHAR2(10) LAST_NAME NOT NULL VARCHAR2(10) DOB DATE PHONE VARCHAR2(12)
INSERT INTO ClientesOK (Cliente_id, Nombre, Apellido, Fecha, Telefono) VALUES (6, 'Fred', 'Brown', '01/01/1970', '800-555-1215'); SELECT * FROM ClientesOK;
INSERT INTO ClientesOK (Cliente_id, Nombre, Apellido, Fecha, Telefono) VALUES (1, 'Lisa', 'Jones', '02/01/1971', '800-555-1225');
Pgina 7
BA2_ora_01
Removiendo una fila desde una tabla DELETE FROM ClientesOK WHERE Cliente_id = 5; SELECT * FROM ClientesOK; ROLLBACK;
Pgina 8
BA2_ora_01
SELECT COUNT(*) INTO producto_contador FROM Productos WHERE Producto_id = p_producto_id; -- Si el producto existe (Por ejemplo: product_count = 1) entonces actualiza el precio del producto IF producto_contador = 1 THEN UPDATE Productos SET precio = precio * p_factor WHERE producto_id = p_producto_id; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; END Actualizar_pecio_producto; /
DECLARE V_producto_id Productos.Producto_id%TYPE; V_factor NUMBER; BEGIN V_producto_id := 2; V_factor := 1.1; Actualizar_pecio_producto(V_producto_id , V_factor ); END; Select * from productos;
Oracle Database 11g SQL Capitulo 2
Recopilando todas las columnas desde una Tabla SELECT * FROM ClientesOK;
Pgina 9
BA2_ora_01
Identificador de filas
SELECT ROWID, Cliente_id FROM ClientesOK;
DESCRIBE ClientesOK
Numero de fila
SELECT ROWNUM, Cliente_id, Nombre, Apellido FROM ClientesOK;
Pgina 10
BA2_ora_01
SELECT ROWNUM, Cliente_id, Nombre, Apellido FROM ClientesOK WHERE Cliente_id = 3;
Ejecucin Aritmtica
SELECT 2*6 FROM dual;
La tabla dual
Dual es una tabla que contiene una sola fila. El comando DESCRIBE muestra la estructura de la tabla dual, junto con la consulta que recupera la fila de la tabla dual: DESCRIBE dual
Pgina 11
BA2_ora_01
Pgina 12
BA2_ora_01
Valores Nulos
SELECT * FROM ClientesOK;
SELECT Cliente_id, Nombre, Apellido, Fecha FROM ClientesOK WHERE Fecha IS NULL;
Pgina 13
BA2_ora_01
SELECT Cliente_id, Nombre, Apellido, Telefono FROM ClientesOK WHERE Telefono IS NULL;
SELECT Cliente_id, Nombre, Apellido, NVL(Telefono, 'Numero de telefono desconocido') AS NUMERO_TELEFONO FROM ClientesOK;
Pgina 14
Pgina 15
BA2_ora_01
WHERE Cliente_id > ALL (2, 3, 4);
NOT LIKE (NO COMO) NOT IN (NO ADENTRO) NOT BETWEEN (NO EN MEDIO) IS NOT NULL (NO ES NULO) IS NOT NAN (NO ES NAN) IS NOT INFINITE (NO ES INFINITO)
Usando el operador LIKE Raya (_) Empareja un carcter en una posicin especificada Por ciento (%) Empareja cualquier nmero de caracteres que comienzan en la posicin especificada SELECT * FROM ClientesOK WHERE Nombre LIKE '_o%';
CREATE TABLE Promociones ( Promocion_id INTEGER CONSTRAINT promocion_PK PRIMARY KEY, Nombre VARCHAR2(20) NOT NULL ); Begin Insert into Promociones values (1,'10% off Z_Files'); Insert into Promociones values (2,'20% off Pop 3');
Pgina 16
BA2_ora_01
Insert into Promociones values (3,'30% off Moder Sci'); Insert into Promociones values (4,'20% off Tank War'); Insert into Promociones values (5,'10% off Chemistry'); Insert into Promociones values (6,'20% off Creative'); Insert into Promociones values (7,'15% off My Front'); End; SELECT * FROM Promociones; SELECT Nombre FROM Promociones WHERE Nombre LIKE '%\%%' ESCAPE '\';
SELECT Nombre FROM Promociones WHERE Nombre LIKE '%\_%' ESCAPE '\';
Usando el operador IN
SELECT * FROM ClientesOK WHERE Cliente_id IN (2, 3, 5);
Pgina 17
BA2_ora_01
SELECT * FROM ClientesOK WHERE Fecha > '01-ENE-1970' AND Cliente_ID > 3;
Precedencia de Operadores
SELECT * FROM ClientesOK WHERE Fecha > '01-ENE-1970' OR Cliente_ID < 2 AND Telefono LIKE '%1211';
WHERE Fecha > '01-ENE-1970' OR (Cliente_ID < 2 AND Telefono LIKE '%1211'); Ordenando filas usando la clausura ORDER BY
Pgina 18
BA2_ora_01
SELECT * FROM ClientesOK ORDER BY Apellido;
Pgina 19
BA2_ora_01
AND productos.producto_id = 3;
SELECT productos.nombre, Tipos_productos.nombre FROM productos, Tipos_productos WHERE productos.tipo_producto_ID = Tipos_productos.tipo_producto_ID ORDER BY productos.nombre;
Producto Cartesiano
SELECT pt.tipo_producto_ID, p.producto_id FROM Tipos_productos pt, productos p;
Ejecutando instruccin SELECT que usa ms de dos tablas SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt
Pgina 20
BA2_ora_01
WHERE p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.nombre; SELECT c.Nombre, c.Apellido, p.nombre AS PRODUCTO, pt.nombre AS TYPE FROM ClientesOK c, Adquisicion pr, productos p, Tipos_productos pt WHERE c.Cliente_ID = pr.Cliente_ID AND p.producto_id = pr.producto_id AND p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.nombre;
Condicin de enlace y tipos de enlace Igualdad utilice el operador de igualdad (=). Desigualdad utilice a operador con excepcin del operador de igualdad, por ejemplo: < >, BETWEEN, y as sucesivamente. Hay tambin tres diversos tipos de ensambla: Inner joins retorna una fila solamente cuando las columnas en el ensamble contienen los valores que satisfacen la condicin de unin. Esto significa eso si una fila tiene un valor nulo en una de las columnas en la condicin de unin, esa fila no se muestra. Outer joins retorna una fila aun cuando una de las columnas en la condicin del unin contiene un valor nulo. Self joins retorna las filas ensambladas en la misma tabla.
Enlaces de desigualdad
SELECT * FROM Grado_Sueldos;
SELECT e.Nombre, e.Apellido, e.Titulo, e.Sueldo, sg.Grado_sueldo_id FROM Empleados e, Grado_Sueldos sg WHERE e.sueldo BETWEEN sg.sueldo_Min AND sg.Sueldo_Max ORDER BY Grado_sueldo_id;
Pgina 21
SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID ORDER BY p.nombre;
Pgina 22
BA2_ora_01
SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID ORDER BY p.nombre;
SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) IN (1, 2, 3, 4);
SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID OR p.tipo_producto_ID = 1;
Pgina 23
SELECT w.Nombre || ' ' || w.Apellido || ' trabaja para '|| m.Nombre || ' ' || m.Apellido FROM Empleados w, Empleados m WHERE w.Encargado_id = m.Empleado_id ORDER BY w.Nombre;
SELECT w.Apellido || ' trabaja para ' || NVL(m.Apellido, 'Los accionistas') FROM Empleados w, Empleados m WHERE w.Encargado_id = m.Empleado_id (+) ORDER BY w.Nombre;
Pgina 24
BA2_ora_01
FROM productos p INNER JOIN Tipos_productos pt USING (tipo_producto_ID); SELECT p.nombre, pt.nombre, tipo_producto_ID FROM productos p INNER JOIN Tipos_productos pt USING (tipo_producto_ID);
SELECT p.nombre, pt.nombre, p.tipo_producto_ID FROM productos p INNER JOIN Tipos_productos pt USING (tipo_producto_ID);
SELECT p.nombre, pt.nombre, p.tipo_producto_ID FROM productos p INNER JOIN Tipos_productos pt USING (p.tipo_producto_ID);
Pgina 25
BA2_ora_01
tabla1 y tabla2 son las tablas que quieren unirse. LEFT nombra que tu deseas realizar un ensamble externo a la izquierda. RIGHT nombra que tu deseas realizar un ensamble externo a la derecha. FULL nombra que tu deseas realizar un ensamble externo completo. Un ensamble externo completo utiliza todas las filas de la tabla1 y tabla2, incluyendo los que tienen valores nulos en las columnas usadas en el ensamble. Usted no puedes realizar directamente un ensamble externo completo con el operador (+).
Ejecutando Right Outer Joins usando SQL/92 SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID ORDER BY p.nombre; SELECT p.nombre, pt.nombre FROM productos p RIGHT OUTER JOIN Tipos_productos pt USING (tipo_producto_ID) ORDER BY p.nombre; SELECT p.nombre, pt.nombre FROM productos p FULL OUTER JOIN Tipos_productos pt USING (tipo_producto_ID) ORDER BY p.nombre;
Pgina 26
BA2_ora_01
Ejecutando Self Joins usando SQL/92 SELECT w.Apellido || ' trabaja para '|| m.Apellido FROM Empleados w, Empleados m WHERE w.Encargado_id = m.Empleado_id; SELECT w.Apellido || ' trabaja para '|| m.Apellido FROM Empleados w INNER JOIN Empleados m ON w.Encargado_id = m.Empleado_id;
Ejecutando Cross Joins usando SQL/92 SELECT * FROM Tipos_productos CROSS JOIN productos;
Pgina 27