Apuntes Oracle

85
Linea de comandos sql server create user 2ASIV IDENTIFIED BY C6ASI2V; GRANT DBA TO ASI2V; Ahora cuando entremos en la pagina nos pedirá autenticación: Usuario: Asi2v Contraseña: C6asi2v 1 SQL – David Royo

Transcript of Apuntes Oracle

Page 1: Apuntes Oracle

Linea de comandos sql server create user 2ASIV IDENTIFIED BY C6ASI2V;

GRANT DBA TO ASI2V;

Ahora cuando entremos en la pagina nos pedirá autenticación:Usuario: Asi2v Contraseña: C6asi2v

1 SQL – David Royo

Page 2: Apuntes Oracle

En la línea de comandos tecleamos:

Esta línea nos va a mostrar todas las tablas de el usuario (user_tables) y todas las tablas que no contengan el carácter $ ya que son tablas de el sistema ( where table…)

2 SQL – David Royo

Page 3: Apuntes Oracle

Para poder continuar realizando consultas tenemos que hacer un commit para guardar los cambios.

Visualiza todos los datos de aquellos empleados cuyo oficio empiece por v.

REM ( ES PARA COMENTARIO).

3 SQL – David Royo

Page 4: Apuntes Oracle

Vamos a sacar las tablas de empleado su apellido y su sueldo anual únicamente.

Mostrar los empleados que su sueldo anual sea superior a un millos y medio.

4 SQL – David Royo

Page 5: Apuntes Oracle

Sacar los empleados cuyo oficio sea vendedor, manager, empleado, o analista.

Sacar los sueldos que estén entre los valores 150000 y 250000

Ahora sacamos en sueldo de los empleados en euros:

5 SQL – David Royo

Page 6: Apuntes Oracle

Visualice todos los datos de los empleados que no tienen comisión.

Queremos sacar los apellidos mas el sueldo mas la comisión y en caso de que la comisión sea nula sumarle 0.

Visualice 2 elevado a 7 la raid cuadrada de 3 y el valor absoluto de 7.

Cuenta las distintas comisiones

Visualice el máximo el mínimo y el promedio del salario de los empleados.

6 SQL – David Royo

Page 7: Apuntes Oracle

Seleccionar el mayor valor de los distintos valores, los valores también pueden ser columna 1 columna 2 etc….

Concatenar dos cadenas el apellido y el oficio.

Otra forma de hacerlo.

Desplaza los caracteres hasta el carácter numero 16, solo tendrá un espacio por culpa de la función concat

Borra los caracteres iguales desde la derecha.

7 SQL – David Royo

Page 8: Apuntes Oracle

Los empleados de los que llevan al menos trabajando 10 años desde la fecha de inicio hasta la fecha actual.

jj

Seleccionar a todos los empleados que trabajan en los departamentos 10 20 y 30.

Formato largo:

Formato corto:

Selecciona todos los campos mediante una abreviatura. De empleados y departamentos.

Visualice todos los datos de cuyos empleados levan mas de 10 años trabajando.

Visualizar el empleado el apellido hasta 30 caracteres acabando el apellido en asteriscos para aquellos cuyo apellido empiece por ‘A’;

Visualice el nº empleado apellido , sueldo , comisión y nº departamento para aquellos empleados en los cuales el sueldo más la comisión sean mayor de 2500.

8 SQL – David Royo

Page 9: Apuntes Oracle

Saca del empleado el máximo sueldo, el minimo sueldo, la suma de los sueldos ,y la media de los sueldos de empleado.

Seleccionar el numero de usuario o UID.

Select anidadosCuando un valor, o conjunto de valores de un criterio where son valores variables, estos valores los obtenemos mediante una secuencia Select.

En ese caso utilizamos Select anidados. La ejecución empieza por el Select mas interno, sus valores se guardan en memoria y se utilizan para evaluar el Select de siguiente nivel.

Visualizar todos los datos, de los empleados que pertenecen a un departamento localizado en Madrid.

EMP ------ DEPTNO

DEPT ------ DEPTNO Loc (‘madrid’)

mejor así mas elegante.

Otra forma, es como si en deptno pondríamos=20 y lo único que en este caso lo hace el ordenador.

Visualice los claves de aquellos empleados que pertenecen a un departamento con un presupuesto comprendido entre 200 y 270.

Visualice los datos de aquellos empleados cuyo sueldo es máximo.

9 SQL – David Royo

Page 10: Apuntes Oracle

Mostrar el empleado que tenga mas de la media del sueldo.

Visalice los datos de los departamentos que tienen algun empleado trabajando en el proyecto 1111

Visualice el total de horas dedicadas por el señor tovar.

Visualice los nombres de los departamentos que tienen como empleados a TOVAR y NEGRO.

Visualice todos los datos de que los departamentos en los que exista algún empleado trabajando n proyectos cuyo tiempo sea mayor que la media. De los tiempo de todos los proyectos.

10 SQL – David Royo

Page 11: Apuntes Oracle

1-------------------------------------------------------------------------------------------------

2-------------------------------------------------------------------------------------------------

3-------------------------------------------------------------------------------------------------

4-------------------------------------------------------------------------------------------------

El de arriba esta mal

5-------------------------------------------------------------------------------------------------

6-------------------------------------------------------------------------------------------------

7-------------------------------------------------------------------------------------------------

11 SQL – David Royo

Page 12: Apuntes Oracle

8-------------------------------------------------------------------------------------------------

9---------------------------------------------------------------------------------------------------

10-------------------------------------------------------------------------------------------------

11-------------------------------------------------------------------------------------------------

12-------------------------------------------------------------------------------------------------

13-------------------------------------------------------------------------------------------------

14-------------------------------------------------------------------------------------------------

15-------------------------------------------------------------------------------------------------

Visualice los empleados que no participan en ningún proyecto.

Numero de filas que tienen en en la tabla dedica valor maximo

3º Visualice todos los datos de la tabla trabaja para aquellas filas en las cuales el número de horas dedicadas sea mínimo.

4º Qué empleados no están en la tabla trabaja, visualice todos sus datos.

5º Qué departamentos no están en la tabla trabaja, visualice todos sus datos.

12 SQL – David Royo

Page 13: Apuntes Oracle

6º Visualice el número de empleados que no están en la tabla trabaja.

8º Qué departamento no tiene ningún empleado.

9º Cuántos departamentos no tienen ningún empleado.

10º Apellidos de los empleados que participan en el proyecto Factur1.

12º Nombre de los proyectos en los que trabaja algún empleado cuya localidad sea Madrid o Bilbao.

13º Visualice todos los datos de los empleados que tienen como jefe a un empleado cuyo oficio sea MANAGER.

13º Visualice todos los datos de los empleados que tienen como jefe a un empleado cuyo oficio sea MANAGER.

13 SQL – David Royo

Page 14: Apuntes Oracle

SELECT ANIDADOS QUE RETORNAN MAS DE UNA COLUMNA

SELECT -----

FROM TABLA1

WHERE ( EXPRESION WHERE1, EXPRESION WHERE2, EXPRESION HERE X)

(SELECT EXPRESION1, EXPRESION2, EXPRESIONX)

FROM WHERE ----);

Visualice los datos de aquellos empleados que tienen el mismo oficio que Jimenez y que pertenecen al mismo departamento.

Emplezamos por el Select de dentro siempre

Visualice los datos del empleado que tiene el mismo jefe que SALA y el mismo SUELDO. Pero que n salga el señor SALA.

14º Visualice los datos de los proyectos en los que participan LOPEZ o SALA. Realice el ejercicio con el operador UNION.

Poniendo un unión entre las dos tablas…

15º Visualice los datos de los proyectos en los que no participa ALONSO.

16º Visualice los empleados con el mismo jefe que Gimeno y que pertenezcan al mismo departamento que Gimeno

14 SQL – David Royo

Page 15: Apuntes Oracle

19º Cuántos empleados tienen el mismo jefe que GIMENO y que además pertenezcan al mismo departamento. No conteís al señor GIMENO.

20º Visualice los datos de los empleados que trabajan 40 horas en el proyecto 1111.

21º Apellidos de los empleados del departamento 10 unidos con los del departamento 20.

Se tiene que hacer con un unión sacamos los datos de deptno 10 y 20

22º Visualice todos los datos de los empleados que tienen por jefe a Gimeno unido con los empleados que tienen por jefe a Sala.

23º Qué empleados trabajan el algún proyecto en el que participa el empleado de empno 102.

24º Qué empleados, si los hay, no trabajan en proyectos ni tienen jefe.

25º Visualice todos los datos de los que tienen por oficio VENDEDOR o pertenecen al departamento 20.

15 SQL – David Royo

Page 16: Apuntes Oracle

QUE TABLAS SE UNEN?¿

Aquellas que tienen algun dato en común

JOINWhere emp.depno=dept.deptno;

Join implicito

El union une dos tablas aunque no tengan nada que ver.

El join se pone para tablas que tienen datos que sean iguales.

Buscar el apellido y el nombre de departamento de cada uno.

Lo que se hace es unir tablas con datos comunes.

Visualice los siguientes datos:

Join con sigo mismo.

Sacar el apellido de el empleado y el apellido de su jefe

Visualice el nombre del proyecto apellido del empleado que dedica horas a ese proyecto.

16 SQL – David Royo

Page 17: Apuntes Oracle

Visualice todos los datos de aquellos empleados que trabajan o que dedican horas a factur1.

Visualice los datos de los proyectos en los cuales participan algún empleado del departamento 30.

Cuantos empleados tienen de jefe a Lopez y participan en Factur1.

17 SQL – David Royo

Page 18: Apuntes Oracle

INSERTAR EMPLEAD DE CODIGO 112 VENDEDOR, su jefe es 102 su fecha de alta es .. ganaba 110000 y pertenece al departamento 50.

Visualice el apellido, fecha de alta, departamento(número), nombre departamento, localidad del departamento, para aquellos empleados que tienen departamento.

Visualice aquellos empleados datos apellidos… que ganan mas que la media de los empleados de su propio departamento

Visualice los datos de aquellos empleados que tienen el mismo departamento que su jefe.

18 SQL – David Royo

Page 19: Apuntes Oracle

SELECT * LEFT JOIN ON EMP.DEPTNO=DEPT.DEPTNO

FROM EMP,DEPT

WHERE EMP.DEPTNO(+)=DEPT.DEPTNO; OUTER JOUN por la izuierda

Visualiza los empleads qu e tienen departamento, el (+) obliga a visualizar los departamentos son empleados.

Mostrand rey como inicial.

AGRUPACCION DE CAMPOS.

Sacar el numero de empleados de cada departamento.

Que salga de el departamento 20 , 5 empleados de el 10 3, del 30, 7

Y posteriormente la suma.

SELECT ______

FROM _______

WHERE CONDICION FILA

FROUP BY _____,______,______

[HAVING Condicion grupo]

[ORDER BY________];

19 SQL – David Royo

Page 20: Apuntes Oracle

Sacar el numero de departamento y cuantos hay en cada departamento:

Visualice los nombres de los departamentos donde hay 4 o mas empleados.

20 SQL – David Royo

Page 21: Apuntes Oracle

COMANDO INSERT

INSERT INTO TABLA [Columna1,….., Columna..))]

SELECT C1,….,CN Aquí se le dice de donde se cojen las tablas

21 SQL – David Royo

Page 22: Apuntes Oracle

Rownum <2 tiene que ser inferior a 2 para que solo nos inserte una fila.

Así deshacemos los cambios realizados.

22 SQL – David Royo

Page 23: Apuntes Oracle

Restrincciones:

vemos las restricciones de la tabla trabaja.

Si tiene clave foránea no nos dejara borrarla.

BORRAR FILAS :

DELETE [FROM] TABLA WHERE CONDICION;

El from es opcional.

Borrar empleados del departamento 20.

Da error por que hay una tabla que esta relacionada.

-----

-----

QUIT

EXIT

CONNECT

DISCONECT

CREATE TABLE

CREATE VIEW

GRAT

REVOKE Con estas sentencias no se pude hacer un rollback;

23 SQL – David Royo

Page 24: Apuntes Oracle

Formato con restricción de columna

Jm. Create table nombre_tabla ( nombre_campo1 tipo

Tipo de limitaciones

Nor null obligatoriedad.

Unique valores únicos

Check Valores permitdos

Primary key clave primaria

Foregn Key Clave foránea

“A las restrinciones se les puede asignar un nombre”

CREATE TABLE CREATE_TABLA( nombre_campo1 tipo [Constraints nombre] [NOT NULL] [UNIQUE] [PRIMARY KEY] [DEFAULT VALOR] [REFERENCES NOMBRE_ATBLA

[CAMPO[CAMPO])]]

[ON DELETE CASCADE]

Como se visualizarían las restinciones de las tablas

Constraint Es para dar nombre a una restrinción

Creamos 2 tablas

24 SQL – David Royo

Page 25: Apuntes Oracle

**

25 SQL – David Royo

Page 26: Apuntes Oracle

0000000000000000000000000000000000000000000000000000000000000000000

DROP TABLE TABLA; Tabla detalle

DROP TABLE TABLA CASCADE CONSTRAINTS; Tabla maestra

Crear la tabla de nombre empydepart, contendrá las columnas:

Ndept,nombred,n_empleados, sumasueldos.

26 SQL – David Royo

Page 27: Apuntes Oracle

Las tablas se pueden crear de 3 maneras.

Crear una tabla.

Crear una tabla.

Crear una tabla mediante select.

** Con primary key y con unique se crea siempre un índice**

Crear un índice ordenado por oficio.

Para borrar un índice se utiliza DROP INDEX: 

    DROP INDEX [usuario.]indice

27 SQL – David Royo

Page 28: Apuntes Oracle

Las vistas al crearlas se almacenan como se puede ver aquí:

LIMITACIÓN DE ALTER TABLE

Alter table modificar una tabla, borrar agregar etc…

a) Añadir nueva columaa. Alter table tabla addb. (columna tipo…., columna tipo…)

b) Cambar columnasa. Aumentar longitud siempreb. Alter table emp modify.c. Disminuir la longitud, si esta vacía.d. Cambiar tipo, Si esta vacía.

c) Borrar columna:a. Alter table nombre_tabla drop colum columna;

d) Añadir restricción.a. Alter table nombre:tabla add constraint nombre_restrinción restrincion;

28 SQL – David Royo

Page 29: Apuntes Oracle

El número máximo de caracteres de sueldo va ser 9.

Así borramos una columna, eso si sin datos.

Añadimos una restricción a una tabla con alter.

Pk_ta es el nombre de la constraint

Queremos borrar la clave primaria?, borramos la constraint.

Alteramos la tabla ta( creada anteriormente, y dentro de esta, la restricción pk_ta.

29 SQL – David Royo

Page 30: Apuntes Oracle

EJERCICIOS Pag 139:

Ejercicio 4…………..

30 SQL – David Royo

Page 31: Apuntes Oracle

Ejercicio 5……

31 SQL – David Royo

Page 32: Apuntes Oracle

ASIGNACCIÓN DE PRIVILEGIOS.

Destinatarios de los privilegios:

Usuarios, roles, públicos.

Tipos de privilegios:

Sobre objetos( formato1).

Sobre el sistema ( formato2).

PRIVILEGIOS TABLA VISTA SECUENCIA PROCEDUREALTER X XDELETE X XEXECUTE XINDEX X XREFERENCES XSELECT X XUPDATE X X

Grant {priv_obj [,…..,priv_ob] | all [privilegies]

On [usuario].objeto.

To {usuaro|rol|public} , {usuario|rol|public}

32 SQL – David Royo

Page 33: Apuntes Oracle

CREAR UN ROLE.Create role nombre [identified by clave];

Vamos a crear el ROL r1 y este va a tener una serie de privilegios.

Hay varios roles que vienen creados por defecto.

VISTAS CON INFORMACIÓN PRIVILEGIOS

Session_privs Privilegos del usuario actual.

User_sys_privs Privilegios del sistema de los usuarios.

User_tab_privs Privilegios sobre objetos de el usuario concedidos a otros.

User_tab_privs_made Concesiones sobre objetos propiedad del usuario.

User_tab_grants Concesiones además quien concede y a quien.

User_col_grants Concesiones sobre columnas de tablas de usuario.

33 SQL – David Royo

Page 34: Apuntes Oracle

PERFILES: Limites a los recursos de la BD para el usuario.

Algunos límites.

-Número de conexiones concurrentes.

-Porcentaje de cpu

-Tiempo máximo de conexión.

-Lecturas lógicas

Create profile nombre_perfil

{sesión_per_user | cpu_per_session | cpu_per_call | connect_time |idle_time | logical_reads_per_Session | llogical_read_per_call | private_sga | composite_limit}

{erdero [kim] | unlimited | default}

Idle_time Tiempo máximo inactive (minute).

Cpu_per_session Limita el tiempo máximo de cpu por sesión en centésimas.

Cpu_per_call limita el tiempo máximo de cpu para cada .. de lec/escritura.

Logical_reads_per_session Nº de bloqueo de datos leidos en una sesión.

Logical_reads_per_call Nº datos leidos en llamada.

Private_sga Multithreading.

SELECT.

INSERT.

UPDATE.

DELETE.

34 SQL – David Royo

Page 35: Apuntes Oracle

Crear tablespace segaus001, fichero de datos C:/oracle10g/oradata/xe/segaut001.dbf tamaño 10 megas , con autoexclusión, próxima extensión 1 mega tamaño máximo 32 megas.

Crear tablespace segauto03, fichero de datos c:/oracle/segauto500301.dbf con tamaño máximo de 20 mb, clausulas de almacenamiento.

Inicial 128 k , siguiente 128k, minimo número de extensiones 1, máximo número extensiones 20.

Crear tablespace segauto04, fichero datos ‘c:/oracle/segauto401.dbf tamaño 16 Mb gestión de espacio con diccionario.

35 SQL – David Royo

Page 36: Apuntes Oracle

Borrar un tablespace:

CREACCION DE SECUENCIAS:

Create sequence nombre

[increment by entero]

[start with entero ]

[maxvalue entero|nomaxvalue]

[minvalue entero|nominvalue]

[cycle|nocycle]

[order|noorder]

[cache entero | nocache]

CLUSTER ( Útil cuando utilizamos frecuentemente el join de dos o más tablas).

1º Crear un clúster.

Create cluster nombre (nombre_columna1, tipo,….., nombre columna, tipo)

[size entero]

[storage clausulas_almacenamiento]

[tablespace nombre_tablespace];

36 SQL – David Royo

Page 37: Apuntes Oracle

Create cluster emyde (código number(2));

2º Crear tabla maestra en el cluster

3º Crear tabla detalle en el cluster

4º Crear índice de cluster

Insertar filas.

Borrar un cluster.

Drop cluster nombre_cluster [including tables [cascade constraints]];

EJERCICIOS pag 196

3-

CREATE ROLE R_INSERCCIONES;

GRANT INSERT, SELECT ON DEPARTE TO R_INSERCCIONES;

GRANT INSERT, EMPLE ON DEPARTE TO R_INSERCCIONES;

GRANT CREATE SESSION,

CREATE DATABASE LINK,

CREATE TABLE, CREATE VIEW TO R_INSECCIONES;

4-

REM Primero creamos usuario y le asignamos el tablespace por defecto compras, el tablespace temporal temp asigno espacio de 1MB en compras asigno 0MB de espacio para system

CREATE USER COMPRADOR IDENTIDIED BY COMPRADOR

DEFAULT TABLESPACE COMPRAS

TEMPORARY TABLESPACE TEMP

QUOTA 1M ON COMPRAS QUOTA 0M ON SYSTEM;

37 SQL – David Royo

Page 38: Apuntes Oracle

GRANT R_INSERCCIONES TO COMPRADOR;

5-

CREATE USER EJER5 IDENTIFIED BY EJER5;

GRANT DBA TO EJER5;

CREATE TABLE T1(

C1 NUMBER(5) PRIMARY KEY,

C2 CHAR(5) NOT NULL TABLESPACE USERS;)

CREATE TABLE T2(

C1 INT PRIMARY KEY,

C2 CHAR(5) NOT NULL TABLESPACE USERS;)

CREATE USER USU1 IDENTIFIED BY USU1 DEFAULT TABLESPACE COMPRAS QUOTA 1M ON COMPRAS;

CREATE USER USU5 IDENTIFIED BY USU1 DEFAULT TABLESPACE COMPRAS QUOTA 2M ON COMPRAS;

6

CREATE ROLE EJER6 ;

GRANT CREATE SESSION TO EJER6;

GRANT SELECT ON (ASI2V.)EMPLE TO EJER6;

8

GRANT SELECT, INSERT, DELETE, UPDATE ON EMPLE TO USU4 WITH ADMIN OPTION;

11

REVOKE ALL USU3

38 SQL – David Royo

Page 39: Apuntes Oracle

Crear perfil con límite de sesiones consecuentes en 2.

Ejercicio 13 pag 196.

Ahora creamos una conexión.

RESUMEN:

Usuarios

Crear CREATE USERConceder permisos Objetos / sistema GRANTQuitar permisos Revoke

Alterar usuariosAñadir perfil / asignación de tablas

ALTER USER

Borrar usuarios DROP USER

Roles

Crear Create roleConceder Objetos/sistema GRANTQuitar permisos

REVOKEBorrar rol

PerfilesCrear CREATE PROFILEBORRAR DROP PROFILE

Tablespaces Incluidos

SystemSysauxTempUsers

Crear tabespaces

Segmentos {extensiones{bloques (8ks)}}Datos

Asignacion local o diccionarioTemporales

BloquesTamaño variable (initial next, ______, ______. Pctincrease)Tamaño uniforme(uniform size)

Tablespaces usuarios.

39 SQL – David Royo

Page 40: Apuntes Oracle

-En la creación se puede iniciar cual es el tablespace por defecto. -Alter usuario para que utilice un tablespace.

Tablespace base de datos.

Alterar la base de datos para que los usuarios no graben en System.

INDICESPor defecto Unique

ExplícitosPrimary keyCreate index in

CLUSTER1º Creo el cluster2º Creo la tabla maestra ref cluster3º Creo la tabla detalle ref cluster4º Creo índice de clusterInsertar registros en las tablasBorrar Drop

Select

Insert

Update

Delete.

Visualizar insertar modificar y truncar

40 SQL – David Royo

Page 41: Apuntes Oracle

PL SQL

Simbología:

; Terminador.% Especificación tipos en variables y en

cursores.- Comodin de byte en el like.

: Campos de Oracle Forms** Exponenciación.<>! Desigual

<<etiqueta>>

:= Asignación-- Comentario línea/*etc*/ Comentario de una o mas líneasNumber (0,n)

Char (n)

Varchar2(n)

Date

41 SQL – David Royo

Page 42: Apuntes Oracle

Long

Long raw – Datos multimedia

Rowid - Identificador de fila

PLSQL – Dec, decimal, real, doublé- precisión, integer, int, smallint, natral, positive, numeric, carácter,varchar,boolean,table,record.

|| Concatenación.

42 SQL – David Royo

Page 43: Apuntes Oracle

Pedir por teclado un número y visualizar la serie comprendida entre 1 y el número introducido.

&n pide por teclado.

Vamos a pedir por teclado que introduzcamos un determinado oficio, en este caso el oficio Vendedor:

Cree un procedimiento que pida un número y muetre uno de los siguientes mansajes:

-El número es negativo.

-El numero es 0.

-El numero es positivo.

43 SQL – David Royo

Page 44: Apuntes Oracle

CREACCION DE PROCEDIMIENTOS:

If condición_1 then

Instruciones;

LSIF condicion2 then

Instruciones;

ELSIF condicionn then

ELSE

Instrucciones;

END IF;

VARIABLES

Declare, IS o ASNombre tipo [{:={DEFAULT}VALOR];I integer := O;

Valor_campo tabla.campo%type;Valor_registro tabla%rontype;

44 SQL – David Royo

Page 45: Apuntes Oracle

INTRUCCIONES DE CONTROL:

If condficion thenInstrucciónes;

End if;If condición then

Instruciones;Else

Instruciones;End if;

If condicion1 then Instruciones1;

Elsif condiciones2 then ;Instruciones3;

ElseInstrucionesx;

End if;

BUCLES:

LOOPInstruciones1;If condicion then exit;Instrucciones2;

End loop;

While condicion loopInstruciones;

End loop;

45 SQL – David Royo

Page 46: Apuntes Oracle

REVERSE:Si queremos hacer un for de 100 a 1 usamos reverse.

FOR VC IN [REVERSE] vi...vf LOPPInstruciones;

End loop;

>SAVE U:\RUTA\Archivo.sql guardar >GET U:\RUTA\Archivo.sql ejecutar>START U:\RUTA\Archivo.sql ejecutar

EJERCICIOS PAGINA 208 15/02/2010

Ejercicio1:Construir un bloque PL/SQL que escriba el texto Hola.

Ejercicio2:Que hace el siguiente bloque?.

Ejercicio3:Introducir el bloque anterior desde sql y guardarlo ene l fichero.

>SAVE U:\RUTA\Archivo.sql

46 SQL – David Royo

Page 47: Apuntes Oracle

Ejercicio4 :Ejecuta la orden select especificada ene l bloque anterior desde sql plus sin la clausila INTO.

Ejercicio5:Cargar y ejecutar el bloque nuevo y comprobar que el resultado aparece en pantalla.

>GET U:\RUTA\Archivo.sql ejecutarEjercicio6:Identificar en el ejemplo numero 2 de procedimiento los siguiente selementos :

SUBPROGRAMAS ( Procedimientos, Funciones )

Create or replace procedure nombre (P1 [{IN|OOUT|IN OUT}] tipo [{default | :=} valor] [,…..]

IS | ASVariables locales;

BeginInstruciones;

[exception aqui es donde se tartan los errors.When constanet1 then instruciones 1;When constante2 then instrucciones2;When others instruciones otrocaso];

End [nombre_procedimiento];

47 SQL – David Royo

Page 48: Apuntes Oracle

48 SQL – David Royo

Page 49: Apuntes Oracle

Tabla Ciclistas:

CICLISTADorsal Nombre Edad Nomeq

EQUIPONomeq Director

LLEVARDorsal Netapa Codigo

ETAPANetapa Km Salida Llegada Dorsal

MILLOTCodigo Tipo Color Premio

PUERTONumpuerto Altura Categoria Pendiente Netapa Dorsal

Dorsal todos heredan de ciclistaCódigo la heredan de llevar

49 SQL – David Royo

Page 50: Apuntes Oracle

50 SQL – David Royo

Page 51: Apuntes Oracle

Any having toasd.asd=asd.asd

51 SQL – David Royo

Page 52: Apuntes Oracle

52 SQL – David Royo

Page 53: Apuntes Oracle

CONTENIDOS:

TABLASCREAR

DIRECTA F1( RESTRINCION DE COLUMNA),F2 (RESTRINCION DE TABLA).INDIRECTA

ALTERARAÑADIR COLUMNACAMBIAR TIPO COLUMNACAMBIAR TAMAÑO COLUMNABORRAR TAMAÑO COLUMNA

BORRAR COLUMNAAÑADIR RESTRINCIÓN BORRAR RESTRINCIÓNACTIVAR / DESACTIVAR.

TRUNCAR TRUNCATE NOMBRE DE LA TABLADROP CREAR SININIMO

VISTAS *

SECUENCIAS **INDICES **

TABLESPACES ORGANIZADOS EN SEGMENTOS Y ESTOS EN EXTENSIONESCREARBORRARALTERAR

USUARIOSCREARCONCEDER PRIVILEGIOS -SOBRE OBJETOS

-SOBRE SISTEMAQUITAR PRIVILEGIOSBORRAR USUARIOSALTERAR USUARIOS

ROLES CREARCONCEDERQUITAR BORAR

53 SQL – David Royo

Page 54: Apuntes Oracle

PERFILES CREAR , ASIGNACION A USUARIO,BORRARCLUSTER CREAR CLUSTER

CREAR TABLAS CREAR INDICE DE CLUSTER INTRODUCIR REGISTROS

REM --------------Ejercicio 1º---------------------REM Codifique un bloque anonimo que pida por tecladoREM un número y lo visualice.

set serveroutput on; declare x INTEGER :=0; begin x:=&n; dbms_output.put_line('El numero es ' || x); end;

REM ---------------Ejercicio 2º--------------------REM Codifique un bloque anonimo que pida por tecladoREM un número y diga si es positivo negativo o cero.

set serveroutput on; declare x INTEGER :=0; BEGIN x:=&n; if x=0 THEN DBMS_OUTPUT.PUT_lINE('El número es cero'); elsif x < 0 then dbms_output.put_line('El numero es negativo'); else dbms_output.put_line('El numero es positivo'); end if; end;

REM ---------------Ejercicio 3º--------------------REM Codifique un bloque anonimo que muestre por pantallaREM los 100 primeros numeros naturales.

set serveroutput on; declare v_total integer :=0; begin

54 SQL – David Royo

Page 55: Apuntes Oracle

for i in 1..100 loop dbms_output.put(i); end loop; dbms_output.put_line(v_total); end;

REM ---------------Ejercicio 4º--------------------REM Codifique un bloque anonimo que muestre los 10 primerosREM números primos. NO FUNCIONA!!!!

set serveroutput on; declare y integer :=0; u integer :=0; v_total integer :=0; begin for i in 1..100 loop if (i/i=0) then i=u dbms_output.put(u); end loop; end;

REM ---------------Ejercicio 4º--------------------REM Codifique un bloque anonimo

55 SQL – David Royo

Page 56: Apuntes Oracle

IMPORTANTE: Mirar en los procedimientos y actualizar después de compilar te dirán si están bien.

Ejercicio 9º ejercicios PSQL.

create or replace procedure ej9 is beginfor i in (select * from emp) loop DBMS_OUTPUT.PUT_LINE (I.EMPNO || I.APELLIDO || I.JEFE);END LOOP;END;

set serveroutput onbeginej9();end;

Ejercicio 10º muestra los empleados de el departamento que le pasemos por teclado, si no hay empleados que saque por pantalla no hay empleados.

create or replace procedure ej10 (NDEPT NUMBER) is beginfor i in (select * from emp WHERE DEPTNO=NDEPT) loop DBMS_OUTPUT.PUT_LINE (I.EMPNO || I.APELLIDO || I.JEFE);END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('no hay empleados');END;

set serveroutput onbeginej10(15); aqui le decimos el departamento por el que tiene que buscar.end;

56 SQL – David Royo

Page 57: Apuntes Oracle

11º Cree un procedimiento que recibe dos numeros y nos escribe en pantalla la suma.

CREATE OR REPLACE PROCEDURE EJ11(N1 NUMBER,N2 NUMBER)ISBEGIN DBMS_OUTPUT.PUT_LINE(N1+N2);END;

set serveroutput onbeginej11(5,10); sumamos 5 y 10.end;

7º Codifique un bloque anonimo y muestre los 10 primerosterminos de la sucession fibonacci es decir 1,1,2,3,5,8...

DECLARE X1 INTEGER:=1; X2 INTEGER:=1; X3 INTEGER; BEGIN DBMS_OUTPUT.PUT_LINE(X1); DBMS_OUTPUT.PUT_LINE(X2); for I in 2..10 loop X3:=X1+X2; DBMS_OUTPUT.PUT_LINE(X3); X1:=X2; X2:=X3; END LOOP; end;

5º Codifique un bloque anónimo que visualice la seriesiguiente 1/2, 2/3 ,......, 100/101

DECLARE BEGIN for I in 1..100 loop DBMS_OUTPUT.PUT_LINE(I || '/' || (I+1)); END LOOP; END;

57 SQL – David Royo

Page 58: Apuntes Oracle

6º Codifique un bloque anonimo que pida un numero por teclado y muestre sus divisores.

create or replace procedure EJ15 ( DIVI REAL, DIVISOR REAL, RESUL OUT REAL) IS BEGIN RESUL:=DIVI / DIVISOR; EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE('EL DIVISOR ES 0'); END; DECLARE R REAL; BEGIN EJ15(10,2,R); DBMS_OUTPUT.PUT_LINE(R); END;

HOJA 2

58 SQL – David Royo

Page 59: Apuntes Oracle

Cursores implícitos:

Mostrar el código nombre y oficio de todos los empleados:set serveroutput onDECLAREBEGIN FOR I IN (SELECT EMPNO,APELLIDO,OFICIO FROM EMP) LOOP DBMS_OUTPUT.PUT_LINE(I.EMPNO||' '||I.APELLIDO||' '||I.OFICIO);END LOOP;END;

Visualice los números de empleados y su apellido atraves d cursores explícitos

set serveroutput ondeclaree emp.empno%type;ape emp.apellido%type;cursor c1 is select empno,apellido from emp;beginopen c1;loop fetch c1 into e,ape; exit when c1%notfound; DBMS_OUTPUT.PUT_LINE(e||' '||ape);END LOOP;END;

59 SQL – David Royo

Page 60: Apuntes Oracle

2ºCodifiqueun bloque anónimo que mediante un cursor explicito muestre todos los datos de los departamentos.

set serveroutput on declare d dept%rowtype; cursor c1 is select * from dept; begin open c1; loop fetch c1 into d; exit when c1%notfound; DBMS_OUTPUT.PUT_LINE(d.deptno||' '|| d.dnombre||' '|| d.loc||' '|| d.presup); END LOOP; CLOSE c1; END;

3ºCodifique un procedimiento que nos muestre: número de empleado, apellidos,sueldo de todos los empleados.

CREATE OR REPLACE PROCEDURE eje3 IS v1 varchar2(20); v2 number(9,2); cursor c1 is SELECT APELLIDO,SUELDO FROM EMP ; BEGIN OPEN C1; LOOP FETCH C1 INTO v1,v2; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v1||' '||v2); END LOOP; CLOSE C1; END; set serveroutput on BEGIN eje3();

60 SQL – David Royo

Page 61: Apuntes Oracle

END;4ºCodifique un bloque anónimo que me muestre por cada empleado, apellido, el total de horas dedicadas a proyectos.

61 SQL – David Royo

Page 62: Apuntes Oracle

CURSORES DE ACTUALIZACIÓN (UPDATE, DELETE)

Declaración

Cursor nombre [(par tipo[,…]])] ISSelect..For update;

UPDATE | DELETE NOMBRETABLASET CAMPO=VALOR

WHERE CURRENT OF NOMBRE_CURSOR.BEGINOPEN NOMBRE();LOOP

FETCH NOMBRE INTO.

Codifiqe un procedimiento que recibe dos argumentos:NDepartamento Número Departamento Incremento %incremento.

CREATE OR REPLACE PROCEDURE AUMENTARSUELDO(ND NUMBER, INCREMENTO INTEGER)IS CURSOR C1 IS SELECT SUELDO FROM EMP WHERE DEPTNO=ND FOR UPDATE; V_NUEVO_SUELDO EMP.SUELDO%TYPE; V_VIEJO_SUELDO EMP.SUELDO%TYPE; BEGIN OPEN C1; LOOP FETCH C1 INTO V_VIEJO_SUELDO; EXIT WHEN C1%NOTFOUND; V_NUEVO_SUELDO:=V_VIEJO_SUELDO*(1+ INCREMENTO/100); UPDATE EMP SET SUELDO=V_NUEVO_SUELDO WHERE CURRENT OF C1; END LOOP; CLOSE C1; END; SET SERVEROUTPUT ON;

62 SQL – David Royo

Page 63: Apuntes Oracle

BEGIN AUMENTARSUELDO(10,10); END;

SUBIR SUELDO:CREATE OR REPLACE PROCEDURE SUBIRSUELDO (DP NUMBER,INCREMENTO INTEGER)IS CURSOR SELECT SUELDO, ROWID FROM EMP WHERE DEPTNO=DP;REG C1% ROWTYPE;V_SUELDO_VIEJO EMP.SUELDO%TYPE;V_SUELDO_NUEVO EMP.SUELDO%TYPE;

BEGIN OPEN C1; LOOP FETCH C1 INTO REG; EXIT WHEN (1% NOTFOUND);

N_SUELDO_VIEJO:=REG.SUELDO;N_SUELDO_NUEVO:=V_SUELDO_VIEJO*(1+INCREMENTO/100);UPDATE EMP SET SUELDO=V_SUELDO_NUEVO WHERE ROWID=REG ROWID;END LOOP;END;

TRANSACCIONES:

T1Operacion1Operacion2Operacion3OperacionN;Rollback o commit;

Commit grabar todo lo que quedaba pendiente.

63 SQL – David Royo

Page 64: Apuntes Oracle

Excepciones definidas por el usuario

1º Declaradas { Declare{ IS / AS

Nombre:excepción

2º ACTIVARLAS / LEVANTARLASIF Condicion then

Raise nombre_excepcion;End if;N

Codificar un procedimiento que recibe el nombre del departamento y que aumente la comisión de los empleados de ese departamento un 5%.

-Nombre inválido.-Comisión es nula para algún empleado.

64 SQL – David Royo