Top Banner
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES UNIANDES FACULTAD DE SISTEMAS MERCANTILES TEMA “MANUAL BASICO DE ORACLE” AUTOR PATRICIO SANGOQUIZA TUTOR ING. OSCAR LLEREN
88
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Basico de Oracle

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES

UNIANDES

FACULTAD DE SISTEMAS MERCANTILES

TEMA

“MANUAL BASICO DE ORACLE”

AUTOR

PATRICIO SANGOQUIZA

TUTOR

ING. OSCAR LLEREN

AMBATO-ECUADOR

2009

Page 2: Basico de Oracle

MANUAL DE ORACLE

COMO INSTALAR

PARA INSTALAR UN SERVIDOR:1º INSTALAR DEVELOPER2º SERVIDOR ORCLE DATABASECLAVE EN SOFWARENOMBRE EMPRESA:DIRECTORIO ALMACENAMIENTO C:/ORANTC:/ORANT SITÍPICA

SE AGREGA PARA UN ENTORNO DE APLICACIÓN

CUSTOM OK FORMS RUNTIME GRAFICS RUNTTIME RUNT TIME REPORTRS ORACLE CONFIGURATION MANAGERS ORACLE ODBC ORACLE OPEN CLOSE

SERVIDOR:

Ponemos siguiente:c.\orainst920NT_Disk\stage\productd.jarNombre: HOME_ORADATA_9IRUTA DE ACCESO C:\ORACLE\DATABASE

SIGUIENTE:

ORACLE9IDATABASE 9.2.0.1SIGUIENTE:TIPO DE INSTALACION

ESTANDARSSIGUEINTE

CONFIGURACION DE BASE DE DATOS

1 USO GENERALSIGUIENTE

NUMERO DE PUERTO 2030SIGUIENTE

NOMBRE DE LA BASE DE DATOS GLOBALSE COMUNICAN:

Page 3: Basico de Oracle

CUANDO HAY UNA GRANJA DE SERVIDORES O CLIENTES DE OTROS SERVIDORES

EL SID ES EL NOMBRES IDENTIFICA A LOS CLIENTES DE UN SERVIDOR LOCALNOMBRE DE BASE DE DATOS = ORCLEN_MI_BASE_SEPTIMO.SERVER1 GLOBAL Y EN EL SID= ORCLEN_MI_ORCL=ORCL

SIGUIENTE

C:\ORACLE.DATABASE

SIGUIENTE

JUEGO DE CARACTERES DE LA BASE DE DATOS:JUEGO DE CARACTERES POR DEFECTO OK

SIGUIENTE

INSTALARRUTA DE ACCESO UBICACION DEL DISCO

BUSCO LAS CARPETAS DISK2 OKBUSCO DISK3 OK

AL FINAL LOS USUARIOSSYS SYSTEM ACOOT SCOTT USUARIO INVITADO TIGER DE CONSULTA

SYS USUARIO DUEÑO ADMINISTRADOR MAXIMO

SYSTEM USUARIO ADINISTRADOR QUIEN DA PERMISOS Y ATRIBUCIONES PONEMOS:

USUARIOS:

SYS DUENIO = DUENIO

SYSTEM MASTER = MASTER

SCOTT TIGER = TIGER

ACEPTARPara conectarse el servidor con el cliente, SERVIDOR base de datos listener puerto 1521

CLIENTE red transporte TCP/IP

Page 4: Basico de Oracle

CUAL ES EL SERVIDOR CUAL ES LA INSTANCIA (SID)USUARIO/ CONTRASEÑA EL CLIENTE:

LAB2-3/192.168.2.22ORCLSYSTEM/MASTER

SE TRABAJA EN: SQL PLUSCONFIGURACION DEL CLIENTE

INICIO TODOS LOS PROGRAMAS ORACLE PARA WINDOWS NT SQL NET EASY CONFIGURATIION CLICKadd database alias a la base de datos orcl_click1 ok

choose protocol TCP/IP

NOMBRE DE HOST AND DATABASE INSTANCE192.168.2.22

ASEMOS PING 192.168.2.22TNSPING ORCL_CLI1 ENTER

CONECCIONES ODBC

REQUISITOS: INSTALAR DRIVE ODBC A ORACLE CREAR CONECCION NATIVA CREAR CONECCION ODBC

CREAR CONECCION NATIVA

PANEL DE CONTROLORIGEN DE DATOSODBCDNS DEL SISTEMAACCESS NUEVO DATOS EXTERNOSENLAZAMOS A SCOTT POR LO GENERAL NOS MUESTRA LAS TALAS DE EL USUARIO SCOTT

HERRAMIENTAS

SENTENCIASSQL> DDL: DATA DEFINITION LANGUAJE DML: DATA MANIPULATION LENGUAJE

Page 5: Basico de Oracle

HISTORIA

El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un

modelo de datos relacional para grandes bancos de datos compartidos". Ese libro

dictaría las direcrices de las bases de datos relacionales. Apenas dos años después IBM

(para quien trabajaba Codd) utiliza las directrices de Codd para crear el Standard

English Query Language (Lenguaje Estándar Inglés para Consultas) al que se le

llamó SEQUEL. Más adelante se le asignaron las siglas SQL (aunque en inglés se

siguen pronunciando SEQUEL, en español se le llama esecuele).

Poco después se convertía en un estándar en el mundo de las bases de datos avalando

por los organismos ISO y ANSI. Aún hoy sigue siendo uno de los estándares más

importantes de la industria informática.

Actualmente el último estándar es el SQL del año 1999 que amplió el anterior estándar

conocido como SQL 92. El SQL de Oracle es compatible con el SQL del año 1999 e

incluye casi todo lo dictado por dicho estándar.

TIPOS DE INSTALACIONES

HARDWARE

RAM: 128 MB (256 MB recomendado) Virtual Memory: Tamaño inicial 200 MB, Tamaño máximo 400 MB Video Adapter: 256 color

ESPACIO EN DISCO DURO:

Requerimiento de espacio en disco duro para FATTipo de Instalación Oracle Home DriveEnterprise Edition 4.75 GBStandard Edition 4.5 GB

Page 6: Basico de Oracle

Personal Edition 4.75 GBAdministrator 1.5 GBRuntime 400 MBOracle Management Server 1.5 GBOracle Internet Directory 4 GB

Requerimiento de espacio en disco duro para NTFSTipo de Instalación Oracle Home DriveEnterprise Edition 2.85 GBStandard Edition 2.8 GBPersonal Edition 2.75 GBAdministrator 790 MBRuntime 150 MBOracle Management Server 945 MBOracle Internet Directory 2.3 GB (incluye base de datos)

NAVEGADOR:

Netscape Navigator 4.76 o superior Microsoft Internet Explorer 5.0 o superior

Nota:ORACLE_HOME es la ruta donde se instalará los componentes Oracle.ORACLE_HOME name es el nombre del actual Oracle Home. Cada Oracle home tiene un home name que distingue este de otros Oracle homes en el computador.

2. En la ventana de Bienvenida, click Next.

Page 7: Basico de Oracle

3. Instale Oracle9i en este directorio. Asegurese que diga OraHome92 en el campoNombre, y que la ruta sea C:\oracle\ora92. Si por defecto no parece estas características seguramente ya hay una base de datos instalada. Click Next.

Page 8: Basico de Oracle

Nota:Si ya existen componentes Oracle instalados en el pc, se recomienda instalarlos en otros Oracle Home. No instale software de Oracle9i release 2 (9.2) dentro de un Oracle home existente que contenga software Oracle8i o superior.

El nombre del Oracle home puede tener hasta 16 caracteres de longitud y esto incluye solo caracteres alfanuméricos y underscores. Los espacios no son permitidos. El Oracle Universal Installer no acepta un número como el primer caracter en el campo Nombre.

4. Seleccione el tipo de instalación. En este caso escoja Oracle9i Database 9.2.0.1.0 Click Next.

5. La base de datos Oracle9i es una base de datos relacional orientada a objetos, la cual

consiste de una base de datos y una instancia. Hay cuatro tipos de instalación:

• Enterprise Edition (la que se instalará): Si selecciona este tipo, Oracle Universal

Installer instala una base de datos preconfigurada, servicios, herramientas del ambiente

de la base de datos, opciones de licencias de Oracle, el Oracle Enterprise

Manager incluyendo Console, Management Server, y Intelligent Agent, utilidades

Oracle, y documentación en línea. Estos productos se usan mas en ambientes data

warehousing y transaction processing.

Page 9: Basico de Oracle

• Standard Edition: Si selecciona este tipo, Oracle Universal Installer instala una base

de datos preconfigurada, servicios, herramientas del ambiente de la base de datos, el

Oracle Enterprise Manager incluyendo Console, Management Server, y Intelligent

Agent, utilidades Oracle.

• Personal Edition: Si selecciona este tipo, Oracle Universal Installer instala el mismo software del Enterprise Edition, pero soporta solo un simple usuario desarrollador y ambiente que requiere full compatibilidad con Enterprise Edition y Standard Edition.

• Personalizado: Si selecciona este tipo, Oracle Universal Installer selecciona componentes individuales de Enterprise Edition, Standard Edition, y Personal Edition.

6. Escoja la configuración de la base de datos en Procesamiento de Transacciones. Click Next. Hay cuatro tipos de ambientes para la base de datos:

• Uso General: Los usuarios ejecutan una variedad de tareas en la base de datos, desde simples transacciones a complejas consultas.

• Procesamiento de Transacciones: Los usuarios ejecutan un gran número de transacciones concurrentes, donde cada transacción es una operación relativamente simple. Las transacciones consisten en escritura, lectura y eliminación de datos en las tablas de la base de datos.

• Almacenes de Datos: Los usuarios ejecutan numerosas consultas complejas que procesan un gran volumen de datos. Tiempo de respuesta, exactitud y disponibilidad son características propias de este tipo.

Page 10: Basico de Oracle

• Personalizada: es creada a partir de las necesidades del usuario.• Solo software: Permite instalar componentes Oracle sin crear la base de datos.

7. En el campo NUMERO DE PUERTO, acepte el valor por defecto, 2030. Click

Next.

8. En esta ventana se detecta si ya existe una base de datos, si ya existe una base de datos, asegúrese de preguntarse bien que desea hacer, actualizar o migrar la base de

Page 11: Basico de Oracle

datos. Si no va a actualizar o migrar una base de datos haga click Next para crear una nueva.

9. En el campo Nombre de la Base de Datos Global, digite UNAB. En el campo SID, acepte el valor por defecto, UNAB. Click Next.Nota:El nombre de la base de datos global es el nombre completo de la base de datos que distingue únicamente de cualquier otra base de datos en el dominio de la red. Por defecto del SID es el mismo nombre que el nombre de la base de datos global.

Page 12: Basico de Oracle

10. Entre la ubicación de archivos de la base de datos, acepte el valor por defecto, C:\

oracle\oradata, o escoja otra ruta. Click Next.

11. Acepte por defecto el Juego el Caracteres. Click Next.

Page 13: Basico de Oracle

12. El Oracle Universal Installer despliega un resumen de las opciones de instalación. Asegúrese que tenga el espacio en disco duro requerido. Click Instalar.

13. Installer empieza instalando y el software relacionado. El Oracle Universal Installer

también crea logs de instalación de este proceso. Este archivo se puede ver durante la

instalación. Este archivo se encuentra localizado en C:\Program Files\Oracle\

Inventory\logs\installActions.log. Si se instala otro producto, el log actual es copiado y

renombrado, quedando siempre la historia de cualquier instalación.

Page 14: Basico de Oracle

15. Después que el software inicial es copiado a disco, el Oracle Universal Installer

siempre configura automáticamente la red para la producción de la Base de Datos. Esto

se hace en el fondo.

16. La creación de la Base de Datos toma al rededor de 20 minutos. El progreso se muestra en la ventana de progreso de la Base de Datos. Cuando la Base de Datos ha sido creada, los servicios NT de la Base de Datos son creados y se confirma las contraseñas de los usuarios system y sys.

Page 15: Basico de Oracle

17. Cuando la Base de Datos ha sido creada completamente y todas las herramientas de configuración han completado sus tareas, la ventana Fin de la Instalación aparece.Click Exit y confirme su salida del Universal Installer.

18. En la ventana de login Oracle Enterprise Manager Console, que aparece

automáticamente después de terminada la instalación, asegúrese que Launch

standalone (para conectarse directamente a la administración de la Base de Datos) este

seleccionado y haga click OK.

Nota: Se conecta con Oracle Management Server (OMS) siempre que necesite crear un repositorio OMS primero.

Page 16: Basico de Oracle

19. Inmediatamente se despliega la consola de manejo de la base de datos.

20. Expanda Network / Databases, entonces de click en el signos más (+) para expandir UNAB. Para loguearse a la instancia, entre system en el campo Usuario y la contraseña dada en al instalación en el campo Contraseña, click OK.

21. Expanda Instancia y seleccione Configuración para ver el estado de la Base de Datos.

Page 17: Basico de Oracle

SQL*Plus

Para poder escribir sentencias SQL al servidor Oracle, éste incorpora la herramienta

SQL*Plus. Toda instrucción SQL que el usuario escribe, es verificada por este

programa. Si la instrucción es válida es enviada a Oracle, el cual enviará de regreso la

respuesta a la instrucción; respuesta que puede ser transformada por el programa

SQL*Plus para modificar su salida.

Para que el programa SQL*Plus funcione en el cliente, el ordenador cliente debe haber

sido configurado para poder acceder al servidor Oracle. En cualquier caso al acceder a

Oracle con este programa siempre preguntará por el nombre de usuario y contraseña.

Estos son datos que tienen que nos tiene que proporcionar el administrador (DBA) de la

base de datos Oracle.

Para conectar mediante SQL*Plus podemos ir a la línea de comandos y escribir el texto

sqlplus. A continuación aparecerá la pantalla: versión gráfica de SQL*Plus

Page 18: Basico de Oracle

Oracle incorpora un programa gráfico para Windows para utilizar SQL*Plus. Se puede

Llamar a dicho programa desde las herramientas instaladas en el menú de programas de

Windows, o desde la línea de programas escribiendo sqlplusw. Al llamarle aparece esta

pantalla:

Como en el caso anterior, se nos solicita el nombre de usuario y contraseña. La cadena

de Host es el nombre completo de red que recibe la instancia de la base de datos a la que

queremos acceder en la red en la que nos encontramos.

También podremos llamar a este entorno desde la línea de comandos utilizando la

sintaxis comentada anteriormente. En este caso:

slplusw usuario/contraseña@nombreServicioBaseDeDatos

Page 19: Basico de Oracle

Esta forma de llamar al programa permite entrar directamente sin que se nos pregunte

por el nombre de usuario y contraseña.

iSQL*Plus. Es un producto ideado desde la versión 9i de Oracle. Permite acceder a las

bases de datos

Oracle desde un navegador. Para ello necesitamos tener configurado un servidor web

Oracle que permita la conexión con la base de datos. Utilizar iSQL*Plus es indicar una

dirección web en un navegador, esa dirección es la de la página iSQL*Plus de acceso a

la base de datos.

Desde la página de acceso se nos pedirá nombre de usuario, contraseña y nombre de la

base de datos con la que conectamos (el nombre de la base de datos es el nombre con el

que se la conoce en la red). Si la conexión es válida aparece esta pantalla:

Ilustración 1,

Page 20: Basico de Oracle

SEGURIDADES

En las bases de datos se plantean problemas de seguridad como la compartición

de datos, acceso a estos, protección contra fallos, contra accesos no permitidos,

etc.

El SGBD facilita mecanismos para prevenir los fallos (subsistema de control),

para detectarlos (subsistema de detección) y para corregirlos (subsistema de

recuperación).

Aspectos fundamentales de la seguridad:

Confidencialidad. No desvelar datos a usuarios no autorizados. Comprende

también la privacidad (protección de datos personales).

Accesibilidad o disponibilidad. La información debe estar disponible y también

el acceso a los servicios.

Integridad. Permite asegurar que los datos no han sido falseados o modificados

de forma indebida.

PROBLEMAS DE SEGURIDAD

Existen dos tipos de mecanismos de seguridad contra el acceso no autorizado:

Discrecionales, se usan para otorgar privilegios a los usuarios.

Obligatorios, sirven para imponer seguridad de múltiples niveles

clasificando los datos los usuarios en varias clases de seguridad e

implementando después la política de seguridad apropiada de la

organización.

Además se pueden crear cuentas de acceso a la base de datos para los distintos

usuarios, las cuales se podrían agrupar en roles.

En una base de datos estadística no se deber permitir tener acceso a información

confidencial detallada sobre individuos específicos. En ocasiones es posible

deducir ciertos hechos relativos a los individuos a partir de consultas, lo que

tampoco debe permitirse.

Otra técnica de seguridad es el cifrado de datos.

CONFIDENCIALIDAD

Primero el sistema debe identificar y autenticar a los usuarios.

Page 21: Basico de Oracle

Además, el administrador deberá especificar los privilegios que un usuario tiene

sobre los objetos: utilizar una BD, consultar ciertos datos, actualizar datos, etc.

Para facilitar la administración los SGBD suelen incorporar el concepto de

perfil, rol o grupo de usuarios que agrupa una serie de privilegios por lo que el

usuario que se asigna a un grupo hereda todos los privilegios del grupo.

El mecanismo de control de acceso se encarga de denegar o conceder el acceso a

los usuarios.

POLITAS DE ADMINISTRACION

Administración DBA (Administrador de la base de datos). Solo el DBA puede

conceder y revocar peticiones a un objeto dado.

Administración por el propietario de objeto (Objectowner Administration). El

creador del objeto es el dueño del objeto y el único autorizado para

administrarlo.

Administración “cuidador” (o administrador) del objeto (Object “curator”

administration). Un sujeto, no necesariamente el creador del objeto, es

nombrado administrador del objeto. Incluso el creador del objeto deber ser

autorizado explícitamente para acceder al objeto.

PRIVILEGIOS DE AUTORIZACIÓN

Sujetos de autorización pueden ser usuarios, grupos de usuarios, roles y

procesos. Son entidades del sistema a las que se les puede conceder

autorizaciones.

Objetos de autorización pueden ser ficheros, directorios, relaciones, tablas,

atributos, clases y jerarquías de clases. Son componentes pasivos del sistema a

los que se les debe dar protección ante accesos no autorizados.

Los privilegios de autorización pueden ser leer, escribir, ejecutar, seleccionar,

insertar, actualizar, referenciar o indexar. Son los tipos de operaciones puede

ejecutar sobre los objetos del sistema.

CONFIDENCIALIDAD. CONFIDENCIALIDAD EN SQL

Soporta control de acceso discrecional.

Privilegios:

Page 22: Basico de Oracle

Nivel de cuenta. Privilegios de usuario. CREATE SCHEMA, CREATE TABLE,

CREATE VIEW, ALTER, DROP, MODIFY, SELECT

Nivel de relación. Se aplican a las relaciones individuales: SELECT, MODIFY,

REFERENCES.

Los privilegios se dan o quitan con GRANT y REVOKE.

Además se pueden crear y eliminar roles de usuario con CREATE ROLE… y

DROP ROLE

Un usuario puede mantener privilegios revocados a través de otro usuario (que

les haya concedido los mismos privilegios).

El administrador o el propietario de los datos deberán especificar los privilegios

de un usuario (utilizar la BD, consultar datos, actualizar datos, crear o actualizar

objetos, ejecutar procedimientos, referenciar objetos, indexar objetos, crear

identificadores, conceder privilegios…).

USUARIO: MEDIO DE CONECCION

PRIVILEGIOS: Permisos que dan o quitan a un usuario

ROLES: Conjunto de privilegios agrupados por afinidad

PERFILES: Permisos a nivel de arquitectura

Usuarios están en dos estados ACTIVO PASIVO

Formas de autentificar

Password

Usuario heredero

Autentificación global por password o herencia

PRIVILEGIOS:

Son de dos tipos

Sistema y objeto

Sistema

Concedida por administrador

Generado afecta al esquema o toda la base de datos

Objeto

Especificado para cada objeto en particular se los concede los dueños del objeto

Page 23: Basico de Oracle

Sistema

Create table en el esquema del usuario

Create an1 table

Crea una tabla en cualquier parte del sistema

Objeto

Insert into clientes

Ingresa elementos en la tabla

FORMAS DE CREACION

SHOW USEREl usuario es "SYSTEM"SQL> CREATE USER US32 IDENTIFIED BY PUS33 PASSWORD EXPIRE4 ACCOUNT LOCK;Usuario creadoSQL> CONNECT SYSTEM/MASTER @SEPTIMO;Conectado.SQL> ALTER USER US32 IDENTIFIED BY JESSICAUsuario modificado.SQL> CONNECT US3/JESSICA @SEPTIMO;Conectado.SQL> GRANT CREATE SESSION TO US3;Concesión terminada con éxito.SQL> CONNECT SYSTEM/MASTER @SEPTIMO;Conectado.SQL> ALTER USER US3 2 ACCOUNT UNLOCK;

Usuario modificado.

SQL> CONNECT SYSTEM/MASTER @SEPTIMO;Conectado.SQL> ALTER USER US3 2 IDENTIFIED BY JESSICA

Usuario modificado.

SQL> CONNECT US3/JESSICA @SEPTIMO;Conectado.

SQL> GRANT CREATE TABLE, SELECT ANY TABLE TO US3;

Page 24: Basico de Oracle

Concesión terminada con éxito.

SQL> CONNECT SYSTEM/MASTER @SEPTIMO;Conectado.SQL> GRANT CONNECT,RESOURCE TO US3;

Concesión terminada con éxito.

SQL> ALTER USER US3 2 DEFAULT TABLESPACE USER;DEFAULT TABLESPACE USER

SQL> ALTER USER US3 2 DEFAULT TABLESPACE USERS;

Usuario modificado.

SQL> CONNECT US3/JESSICA @SEPTIMOConectado.SQL> CREATE TABLE EJERUS3 2 (COD NUMBER(5), 3 NOM VARCHAR (20)Tabla creada.

SQL> SELECT * FROM EJERUS3;

ninguna fila seleccionada

SQL> INSERT INTO EJERUS3 VALUES(1,'JESSICA');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> SELECT * FROM EJERUS3;

COD NOM --------- -------------------- 1 JESSICA

SQL> INSERT INTO EJERUS3 VALUES (2,'PATRICIO');

1 fila creada.

SQL> SELECT * FROM EJERUS3;

Page 25: Basico de Oracle

COD NOM --------- -------------------- 1 JESSICA 2 PATRICIO

SQL> SELECT * FROM US2.EJERUS2;

COD NOM --------- -------------------- 1 DIEGO

SQL> INSERT INTO US2.EJERUS2 VALUES (3,'JESSICA');INSERT INTO US2.EJERUS2 VALUES (3,'JESSICA') SQL> SELECT * FROM US5.EJERUS5;

COD NOM --------- -------------------- 1 daniel

SQL> SELECT * FROM US6.EJERUS6;

COD NOM --------- -------------------- 1 DIEGOS

SQL> INSERT INTO US2.EJERUS2 VALUES (3,'JESSICA');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> INSERT INTO US2.EJERUS2 VALUES (7,'PATRICIO');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> SELECT * FROM US2.EJERUS2;

COD NOM --------- -------------------- 1 DIEGO 3 JESSICA 7 PATRICIO

Page 26: Basico de Oracle

6 DIEGOS

SQL> GRANT INSERT ON EJERUS3 TO US1,US2,US4,US5,US6;

Concesión terminada con éxito.

SQL> INSERT INTO US6.EJERUS6 VALUES (11,'LUKAS');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> INSERT INTO US5.EJERUS5 VALUES (14,'COSITA');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> SELECT 2 * FROM US5.EJERUS5;

COD NOM --------- -------------------- 1 daniel 14 COSITA

SQL> SELECT * FROM EJERUS3;

COD NOM --------- -------------------- 3 SANCHEZ DIEGO 1 JESSICA 2 PATRICIO 9 LUCRESIA LOCA

SQL> CONNECT SYSTEM/MASTER @SEPTIMO;Conectado.SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

TABLESPACE_NAME ------------------------------ SYSTEM UNDOTBS1 TEMP CWMLITE

Page 27: Basico de Oracle

DRSYS EXAMPLE INDX ODM TOOLS USERS XDB SEPTIMO2 SEPTIMO3 SEPTIMO5 SEPTIMO7 SEPTIMO1 SEPTIMO9 OTRO3 OTRO5 OTRO OTRO7

TABLESPACE_NAME ------------------------------ OTRO2 SEPTIMO ORTO

24 filas seleccionadas.

SQL> CONNECT SYSTEM/MASTER @SEPTIMOConectado.

SQL> CREATE USER INVENTARIOUS3 2 IDENTIFIED BY PATRICIO 3 DEFAULT TABLESPACE SEPTIMO2 4 ACCOUNT UNLOCK;

Usuario creado.

SQL> GRANT CONNECT,RESOURCE TO INVENTARIOUS3;

Concesión terminada con éxito.

SQL> GRANT CONNECT,RESOURCE TO INVENTARIOUS3 2 WITH ADMIN OPTION;

Concesión terminada con éxito.

SQL> SHOW USERel usuario es "SYSTEM"SQL> CONNECT INVENTARIOUS3/PATRICIO @SEPTIMOConectado.

Page 28: Basico de Oracle

ESTRUCTURA DEL LENGUAJE SQL

SELECT. Se trata del comando que permite realizar consultas sobre los datos

de la base de datos. Obtiene datos de la base de datos.

DML, Data Manipulation Language (Lenguaje de manipulación de datos).

Modifica filas (registros) de la base de datos. Lo forman las instrucciones

INSERT, UPDATE, MERGE y DELETE.

DDL, Data Definition Language (Lenguaje de definición de datos). Permiten

modificar la estructura de las tablas de la base de datos. Lo forman las

instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.

Instrucciones de transferencia. Administran las modificaciones creadas por las

instrucciones DML. Lo forman las instrucciones ROLLBACK, COMMIT y

SAVEPOINT

DCL, Data Control Language (Lenguaje de control de datos). Administran

los derechos y restricciones de los usuarios. Lo forman las instrucciones

GRANT y REVOKE.

NORMAS DE ESCRITURA

En SQL no se distingue entre mayúsculas y minúsculas. Da lo mismo como se

escriba.

El final de una instrucción lo calibra el signo del punto y coma

Los comandos SQL (SELECT, INSERT,...) no pueden ser partidos por espacios

o saltos de línea antes de finalizar la instrucción. El intérprete SQL plus indicas

Se pueden tabular líneas para facilitar la lectura si fuera necesario

Los comentarios en el código SQL comienzan por /* y terminan por */

ESQUEMAS DE USUARIO Y OBJETOS

Cada usuario de una base de datos posee un esquema. El esquema tiene el mismo

nombre que el usuario y sirve para almacenar los objetos de esquema, es decir los

objetos que posee el usuario.

Esos objetos pueden ser: tablas, vistas, secuencias, índices, sinónimos e instantáneas.

Page 29: Basico de Oracle

Esos objetos son manipulados y creados por los usuarios. En principio sólo los

administradores y los usuarios propietarios pueden acceder a cada objeto, salvo que se

modifiquen los privilegios del objeto para permitir su acceso por parte de otros usuarios.

CREACIÓN DE TABLAS

Nombre de las tablas

Deben cumplir las siguientes reglas:

Deben comenzar con una letra

No deben tener más de 30 caracteres

Sólo se permiten utilizar letras del alfabeto (inglés), números o el signo de

subrayado (también el signo $ y #, pero esos se utilizan de manera especial por

lo que no son recomendados)

No puede haber dos tablas con el mismo nombre para el mismo usuario (pueden

coincidir los nombres si están en distintos esquemas)

No puede coincidir con el nombre de una palabra reservada de Word

ORDEN CREATE TABLE

Es la orden SQL que permite crear una tabla. Por defecto será almacenad en el

tablespace por defecto del usuario que crea la tabla. Sintaxis:

CREATE TABLE [esquema.] nombreDeTabla

(nombreDeLaColumna1 tipoDeDatos [, ...]);

Ejemplo:

CREATE TABLE proveedores (nombre varchar2(25));

Crea una tabla con un solo campo de tipo varchar2.

Sólo se podrá crear la tabla si el usuario posee los permisos necesarios para ello. Si la

tabla pertenece a otro esquema (suponiendo que el usuario tenga permiso para grabar

tablas en ese otro esquema), se antepone al nombre de la tabla , el nombre del esquema:

CREATE TABLE otroUsuario.proveedores (nombre varchar2(25));

Page 30: Basico de Oracle

ORDEN DESCRIBE

El comando DESCRIBE, permite obtener la estructura de una tabla.

Ejemplo:

DESCRIBE proveedores;

Y aparecerán los campos de la tabla proveedores.

ORDEN INSERT

Permite añadir datos a las tablas. Más adelante se comenta de forma más detallada. Su

sintaxis básica es:

INSERT INTO tabla [(columna1 [, columna2...])]

VALUES (valor1 [,valor2]);

Indicando la tabla se añaden los datos que se especifiquen tras el apartado values en un

nuevo registro. Los valores deben corresponderse con el orden de las columnas. Si no es

así se puede indicar tras el nombre de la tabla y entre paréntesis.

Ejemplo:

INSERT INTO proveedores(nombre, CIF)

VALUES (‘Araja SA’,’14244223Y’);

CONSULTAR LAS TABLAS DEL USUARIO

En el diccionario de datos hay una entrada que permite consultar las tablas de cada

usuario. Esa entrada es USER_TABLES. De forma que SELECT * FROM

USER_TABLES obtiene una vista de las tablas del usuario actual. Hay diversas

columnas que muestran datos sobre cada tabla, entre ellas la columna

TABLES_NAME muestra el nombre de la tabla.

Page 31: Basico de Oracle

BORRAR TABLAS

La orden DROP TABLE seguida del nombre de una tabla, permite eliminar la tabla en

cuestión.

Al borrar una tabla:

Desaparecen todos los datos

Cualquier vista y sinónimo referente a la tabla seguirán existiendo, pero ya no

funcionarán (conviene eliminarlos)

Las transacciones pendientes son aceptadas (COMMIT)

Sólo es posible realizar esta operación si se es el propietario de la tabla o se

posee el privilegio DROP ANY TABLE

El borrado de una tabla es irreversible, y no hay ninguna petición de confirmación,

por lo que conviene ser muy cuidadoso con esta operación.

TIPO LONG

Se trata de un tipo de datos que actualmente se mantiene por compatibilidad. Se

recomienda encarecidamente utilizar en su lugar el tipo CLOB (que se comentará más

adelante). En cualquier caso este tipo permite almacenar textos de hasta 2 GB de

tamaño.

Pero no puede formar clave, ni índice, ni ser parte de la cláusula WHERE, ni GROUP

BY, ni SELECT con DISTINCT, ni pueden ser UNIQUE y sólo puede haber un campo

de este tipo en una misma tabla entre otras limitaciones.

DATE

El tipo DATE permite almacenar fechas. Las fechas se pueden escribir en formato día,

mes y año entre comillas. El separador puede ser una barra de dividir, un guión y casi

cualquier símbolo.

Para almacenar la fecha actual basta con utilizar la función SYSDATE que devuelve

esa fecha.

TIMESTAMP

Es una extensión del anterior, almacena valores de día, mes y año, junto con hora,

minuto y segundos (incluso con decimales). Con lo que representa un instante concreto

en el tiempo. Un ejemplo de TIMESTAMP sería ‘2/2/2004 18:34:23,34521’. En este

Page 32: Basico de Oracle

caso si el formato de fecha y hora del sistema está pensado para el idioma español, el

separador decimal será la coma (y no el punto)

INTERVALOS

Hay unos cuantos tipos de datos en Oracle que sirven para almacenar intervalos de

tiempo (no fechas, sino una suma de elementos de tiempo).

INTERVAL YEAR TO MONTH

Este tipo de datos almacena años y meses. Tras la palabra YEAR se puede indicar la

precisión de los años (cifras del año), por defecto es de dos. Ejemplo:

CREATE TABLE tiempos (meses INTERVAL YEAR(3) TO MONTH);

INSERT INTO tiempos VALUES(’3-2’);

En el ejemplo se inserta un registro que representa 3 años y dos meses.

INTERVAL DAY TO SECOND

Representa intervalos de tiempo que expresan días, horas, minutos y segundos. Se

puede indicar la precisión tras el texto DAY y el número de decimales de los segundos

tras el texto SECOND. Ejemplo:

CREATE TABLE tiempos (dias INTERVAL DAY(3) TO SECOND(0));

INSERT INTO tiempos VALUES(’2 7:12:23’);

RAW

Sirve para almacenar valores binarios de hasta 2000 bytes (se puede especificar el

tamaño máximo entre paréntesis). El valor LONG RAW almacena hasta 2GB.

LOB

Son varios tipos de datos que permiten almacenar valores muy grandes. Más adelante se

comentan en su totalidad. Incluye a BLOB, CLOB, NCLOB y BFILE.

ROWID

Valor hexadecimal que representa la dirección única de una fila en su tabla.

MODIFICAR TABLAS

CAMBIAR DE NOMBRE

La orden RENAME permite el cambio de nombre de cualquier objeto. Sintaxis:

Page 33: Basico de Oracle

RENAME nombreViejo TO nombreNuevo

BORRAR CONTENIDO DE TABLAS

La orden TRUNCATE TABLE seguida del nombre de una tabla, hace que se elimine

el contenido de la tabla, pero no la tabla en sí. Incluso borra del archivo de datos el

espacio ocupado por la tabla.

Esta orden no puede anularse con un ROLLBACK.

MODIFICAR TABLAS

La versátil ALTER TABLE permite hacer cambios en la estructura de una tabla.

AÑADIR COLUMNAS

ALTER TABLE nombreTabla ADD(nombreColumna TipoDatos

[Propiedades]

[,columnaSiguiente tipoDatos [propiedades]...)

Permite añadir nuevas columnas a la tabla. Se deben indicar su tipo de datos y sus

propiedades si es necesario (al estilo de CREATE TABLE).

Las nuevas columnas se añaden al final, no se puede indicar otra posición.

BORRAR COLUMNAS

ALTER TABLE nombreTabla DROP(columna);

Elimina la columna indicada de manera irreversible e incluyendo los datos que contenía.

No se puede eliminar la última columna (habrá que usar DROP TABLE).

MODIFICAR COLUMNA

Permite cambiar el tipo de datos y propiedades de una determinada columna. Sintaxis:

ALTER TABLE nombreTabla MODIFY(columna tipo [propiedades]

[columnaSiguiente tipo [propiedades] ...]

Los cambios que se permiten son:

Incrementar precisión o anchura de los tipos de datos

Sólo se puede reducir la anchura si la anchura máxima de un campo si esa columna

posee nulos en todos los registros, o todos los valores so o no hay registros

Se puede pasar de CHAR a VARCHAR2 y viceversa (si no se modifica la anchura)

Se puede pasar de DATE a TIMESTAMP y viceversa

Page 34: Basico de Oracle

AÑADIR COMENTARIOS A LAS TABLAS

Se le pueden poner comentarios a las tablas y las columnas. Un comentario es un texto

descriptivo utilizado para documentar la tabla. Sintaxis:

COMMENT ON { TABLE NombreTabla | COLUMN tabla.nombreColumna }

IS ‘Comentario’

Para mostrar los comentarios puestos se usan las siguientes vistas del diccionario de

datos mediante la instrucción SELECT:

USER_TAB_COMMENTS. Comentarios de las tablas del usuario actual.

USER_COL_COMMENTS. Comentarios de las columnas del usuario actual.

ALL_TAB_COMMENTS. Comentarios de las tablas de todos los usuarios (sólo

administradores)

ALL_COL_COMMENTS. Comentarios de las columnas de todos los usuarios

(sólo administradores).

VALOR POR DEFECTO

A cada columna se le puede asignar un valor por defecto durante su creación mediante

la propiedad DEFAULT. Se puede poner esta propiedad durante la creación o

modificación de la tabla, añadiendo la palabra DEFAULT tras el tipo de datos del

campo y colocando detrás el valor que se desea por defecto.

Ejemplo:

CREATE TABLE articulo (cod NUMBER(7), nombre VARCHAR2(25),

precio NUMBER(11,2) DEFAULT 3.5);

RESTRICCIONES

Una restricción es una condición de obligado cumplimiento para una o más columnas de

la tabla. A cada restricción se le pone un nombre, en el caso de no poner un nombre (en

las que eso sea posible) entonces el propio Oracle le coloca el nombre que es un

mnemotécnico con el nombre de tabla, columna y tipo de restricción.

Su sintaxis general es:

{CREATE TABLE nombreTabla |

ALTER TABLE nombreTabla {ADD | MODIFY}}

(campo tipo [propiedades] [,...]

CONSTRAINT nombreRestricción tipoRestricción (columnas)

Page 35: Basico de Oracle

[,CONSTRAINT nombrerestricción tipoRestricción (columnas) ...)

Las restricciones tienen un nombre, se puede hacer que sea Oracle el que les ponga

nombre, pero entonces será críptico. Por eso es mejor ponerle uno mismo.

Los nombres de restricción no se pueden repetir para el mismo esquema, por lo que es

buena idea incluir de algún modo el nombre de la tabla, los campos involucrados y el

tipo de restricción en el nombre de la misma. Por ejemplo pieza_id_pk podría indicar

que el campo id de la tabla pieza tiene una clave principal (PRIMARY KEY).

PROHIBIR NULOS

La restricción NOT NULL permite prohibir los nulos en una determinada tabla. Eso

obliga a que la columna tenga que tener obligatoriamente un valor para que sea

almacenado el registro.

Se puede colocar durante la creación (o modificación) del campo añadiendo la palabra

NOT NULL tras el tipo:

CREATE TABLE cliente(dni VARCHAR2(9) NOT NULL);

En ese caso el nombre le coloca Oracle. La otra forma (que admite nombre) es:

CREATE TABLE cliente(dni VARCHAR2(9)

CONSTRAINT dni_sinnulos NOT NULL(dni));

VALORES ÚNICOS

Las restricciones de tipo UNIQUE obligan a que el contenido de uno o más campos no

puedan repetir valores. Nuevamente hay dos formas de colocar esta restricción:

CREATE TABLE cliente(dni VARCHAR2(9) UNIQUE);

En ese caso el nombre de la restricción la coloca el sistema Oracle. Otra forma es:

CREATE TABLE cliente(dni VARCHAR2(9) CONSTRAINT dni_u UNIQUE);

Esta forma permite poner un nombre a la restricción. Si la repetición de valores se

refiere a varios campos, la forma sería:

CREATE TABLE alquiler(dni VARCHAR2(9),

cod_pelicula NUMBER(5),

CONSTRAINT alquiler_uk UNIQUE(dni,cod_pelicula) ;

La coma tras la definición del campo cod_pelicula hace que la restricción sea

independiente de ese campo. Eso obliga a que, tras UNIQUE se indique la lista de

campos.

Page 36: Basico de Oracle

Los campos UNIQUE son las claves candidatas de la tabla (que habrán sido detectadas

en la fase de diseño de la base de datos).

CLAVE PRIMARIA

La clave primaria de una tabla la forman las columnas que indican a cada registro de la

misma. La clave primaria hace que los campos que la forman sean NOT NULL (sin

posibilidad de quedar vacíos) y que los valores de los campos sean de tipo UNIQUE

(sin posibilidad de repetición).

Si la clave está formada por un solo campo basta con:

CREATE TABLE cliente(

dni VARCHAR2(9) PRIMARY KEY,

Nombre VARCHAR(50)) ;

O, poniendo un nombre a la restricción:

CREATE TABLE cliente(

dni VARCHAR2(9) CONSTRAINT cliente_pk PRIMARY KEY,

Nombre VARCHAR(50)) ;

Si la clave la forman más de un campo:

CREATE TABLE alquiler(dni VARCHAR2(9),

cod_pelicula NUMBER(5),

CONSTRAINT alquiler_pk PRIMARY KEY(dni,cod_pelicula) ;

CLAVE SECUNDARIA O FORÁNEA

Una clave secundaria o foránea, es uno o más campos de una tabla que están

relacionados con la clave principal de los campos de otra tabla. La forma de indicar una

clave foránea es:

CREATE TABLE alquiler(dni VARCHAR2(9),

cod_pelicula NUMBER(5),

CONSTRAINT alquiler_pk PRIMARY KEY(dni,cod_pelicula),

CONSTRAINT dni_fk FOREIGN KEY (dni)

REFERENCES clientes(dni),

CONSTRAINT pelicula_fk FOREIGN KEY (cod_pelicula)

REFERENCES peliculas(cod)

);

Page 37: Basico de Oracle

Esta completa forma de crear la tabla alquiler incluye sus claves foráneas, el campo dni

hace referencia al campo dni de la tabla clientes y el campo cod_pelicula que hace

referencia al campo cod de la tabla peliculas. También hubiera bastado con indicar sólo

la tabla a la que hacemos referencia, si no se indican los campos relacionados de esa

tabla, se toma su clave principal (que es lo normal).

Esto forma una relación entre dichas tablas, que además obliga al cumplimiento de la

integridad referencial. Esta integridad obliga a que cualquier dni incluido en la tabla

alquiler tenga que estar obligatoriamente en la tabla de clientes. De no ser así el registro

no será insertado en la tabla (ocurrirá un error).

Otra forma de crear claves foráneas (sólo válida para claves de un solo campo) es:

CREATE TABLE alquiler(

dni VARCHAR2(9) CONSTRAINT dni_fk

REFERENCES clientes(dni),

cod_pelicula NUMBER(5) CONSTRAINT pelicula_fk

REFERENCES peliculas(cod)

CONSTRAINT alquiler_pk PRIMARY KEY(dni,cod_pelicu ));

Esta definición de clave secundario es idéntica a la anterior, sólo que no hace falta

colocar el texto FOREIGN KEY.

Por ello Oracle nos ofrece dos soluciones a añadir tras la cláusula REFERENCES:

ON DELETE SET NULL. Coloca nulos todas las claves secundarias

relacionadas con la borrada.

ON DELETE CASCADE. Borra todos los registros cuya clave secundaria es

igual que la clave del registro borrado.

Si no se indica esta cláusula, no se permite el borrado de registros relacionados.

El otro problema ocurre si se desea cambiar el valor de la clave principal en un registro

relacionado con claves secundarias. En muchas bases de datos se implementan

soluciones consistentes en añadir ON UPDATE CASCADE o ON UPDATE SET

NULL. Oracle no implementa directamente estas soluciones. Por lo que hay que hacerlo

de otra forma. Las soluciones son:

Implementar un TRIGGER para que cuando se actualice el registro se actualicen

las claves secundarias (el mecanismo de funcionamiento es parecido al que se

muestra en el siguiente párrafo).

Añadir un registro igual que el que se quiere cambiar en la tabla principal, pero

con el nuevo valor de la clave. Mediante una instrucción UPDATE actualizar a

Page 38: Basico de Oracle

ese valor de clave todos los registros de la tabla secundaria cuyo valor coincida

con la antigua clave. Finalmente borrar el registro en la tabla principal con el

valor antiguo de la clave.

La sintaxis completa para añadir claves foráneas es:

CREATE TABLE tabla(lista_de_campos

CONSTRAINT nombreRestriccion FOREIGN KEY (listaCampos)

REFERENCES tabla(clavePrincipalRelacionada)

[ON UPDATE {SET NULL | CASCADE}]

);

Si es de un solo campo existe esta alternativa:

CREATE TABLE tabla(lista_de_campos tipos propiedades,

nombreCampoClaveSecundaria

CONSTRAINT nombreRestriccion

REFERENCES tabla(clavePrincipalRelacionada)

[ON UPDATE {SET NULL | CASCADE}]

);

COMO SE CREA TABLAS

PASOS:

SHOW USER

el usuario es "SYSTEM"

SQL> CREATE USER US3

2 IDENTIFIED BY PUS3

3 PASSWORD EXPIRE

4 ACCOUNT LOCK;

Usuario creado.

SQL> GRANT CREATE SESSION TO US3;

Concesión terminada con éxito.

SQL> CONNECT SYSTEM/MASTER @SEPTIMO

SQL> CONNECT US3/PUS3 @SEPTIMO;

Page 39: Basico de Oracle

Conectado.

SQL> ALTER USER US3

2 ACCOUNT UNLOCK;

Usuario modificado.

SQL> CONNECT SYSTEM/MASTER @SEPTIMO;

Conectado.

SQL> ALTER USER US3

2 IDENTIFIED BY JESSICA

3 ;

Usuario modificado.

SQL> CONNECT US3/JESSICA @SEPTIMO;

Conectado.

SQL> GRANT CREATE TABLE, SELECT ANY TABLE TO US3;

Concesión terminada con éxito.

SQL> CONNECT US3/JESSICA @SEPTIMO

Conectado.

SQL> CONNECT SYSTEM/MASTER @SEPTIMO;

Conectado.

SQL> GRANT CONNECT,RESOURCE TO US3;

Concesión terminada con éxito.

SQL> ALTER USER US3

2 DEFAULT TABLESPACE USER;

DEFAULT TABLESPACE USER

SQL> ALTER USER US3

2 DEFAULT TABLESPACE USERS;

Usuario modificado.

Page 40: Basico de Oracle

SQL> CONNECT US3/JESSICA @SEPTIMO

Conectado.

SQL> CREATE TABLE EJERUS3

2 (COD NUMBER(5),

3 NOM VARCHAR (20)

4 );

Tabla creada.

SQL> INSERT INTO US2.EJERUS2 VALUES (3,'JESSICA');

INSERT INTO US2.EJERUS2 VALUES (3,'JESSICA')

TABLAS

SQL> CREATE TABLE CLIENTES(

2 COD_CLI NUMBER (5) CONSTRAINT PK_CLIENTES PRIMARY KEY,

3 NOM_CLI VARCHAR(40) NOT NULL,

4 DIR_CLI VARCHAR(50),

5 TEL_CLI CHAR(9),

6 RUC_CLI CHAR(13));

Tabla creada.

SQL> CREATE TABLE PROVEEDORES(

2 COD_PROV NUMBER (9) CONSTRAINT PK_PROVEEDORES PRIMARY

KEY,

3 NOM_PROV VARCHAR (40) NOT NULL,

4 DIR_PROV VARCHAR(50),

5 TEL_PROV CHAR(9),

6 RUC_PROV CHAR(15));

Tabla creada.

SQL> CREATE TABLE PRODUCTOS (

2 COD_PROD NUMBER(10) CONSTRAINT PK_PRODUCTOS PRIMARY KEY,

3 NOM_PROD VARCHAR (200) NOT NULL,

4EXIS_PROD NUMBER (10) CONSTRAINT CH_EXIST

CHECK(EXIS_PROD>=0),

Page 41: Basico de Oracle

5COST_PROD NUMBER(10,2)NOT NULL,

6RE_VENT NUMBER(10,2)NOT NULL,

7COD_CAT NUMBER (3) CONSTRAINT FK_CATEGORIAS REFERENCES

CATEGORIAS

8);

Tabla creada.

SQL> CREATE TABLE CATEGORIAS(

2 COD_CAT NUMBER(3) CONSTRAINT PK_CATEGORIAS PRIMARY KEY,

3 NOM_CAT VARCHAR(30) NOT NULL );

CREATE TABLE COMPRAS (

2 NUM_COM NUMBER (10) CONSTRAINT PK_COMPRAS PRIMARY KEY,

3 FECH_COM DATE DEFAULT SYSDATE,

4 TOT_COM NUMBER (10, 2),

5 COD_PROV NUMBER(5) CONSTRAINT FK_PROVEEDOR REFERENCES

PROVEEDORES

6);

Tabla creada.

SQL> CREATE TABLE VENTAS (

2 NUM_FAC NUMBER(10) CONSTRAINT PK_VENTAS PRIMARY KEY,

3 FECH_VEN DATE DEFAULT SYSDATE,

4 SUBT_VEN NUMBER (10,2) NOT NULL,

5 DES_VEN NUMBER(10,2) NOT NULL,

6 IVA_POR NUMBER(10,2) NOT NULL,

7 IVA_VAL NUMBER (10,2) NOT NULL,

8 TOT_VEN NUMBER (10,2) NOT NULL,

9 COD_CLI NUMBER (5) CONSTRAINT FK_CLIENTES REFERENCES

CLIENTES

10);

Tabla creada.

SQL> CREATE TABLE DETALLE_COMPRAS(

Page 42: Basico de Oracle

2 COD_DET_COM NUMBER(10) CONSTRAINT PK_DET_COM PRIMARY

KEY,

3 CANT_COM NUMBER (10) CONSTRAINT CH_CANTCOM CHECK

(CANT_COM >0),

4 COST_COM NUMBER (10,2) CONSTRAINT CH_COSTCOM CHECK

(COST_COM>0),

5 NUM_COM NUMBER (10) CONSTRAINT FK_COMPRAS REFERENCES

COMPRAS,

6 COD_PROD NUMBER (10) CONSTRAINT FK_PROCOMP REFERENCES

PRODUCTOS

7);

Tabla creada.

SQL> CREATE TABLE DETALLE_VENTAS(

2 COD_DET_VEN NUMBER (10) CONSTRAINT PK_DET_VEN PRIMARY KEY,

3CANT_VEN NUMBER (10) CONSTRAINT CH_CANTVEN

CHECK(CANT_VEN >0),

4COST_VEN NUMBER (10,2) CONSTRAINT CH_COSTVEN

CHECK(COST_VEN >0),

5 PRE_VEN NUMBER(10,2) CONSTRAINT CH_PREVEN CHECK(PRE_VEN

>0),

6NUM_FAC NUMBER (10) CONSTRAINT FK_VENTAS REFERENCES

VENTAS,

7COD_PROD NUMBER (10) CONSTRAINT FK_PROVEN REFERENCES

PRODUCTOS

Tabla creada.

Page 43: Basico de Oracle
Page 44: Basico de Oracle
Page 45: Basico de Oracle

OPERADORES LOGICOS

NOT

AND

OR

CONSULTAS SELECT

CONDICIONES

Se pueden realizar consultas que restrinjan los datos de salida de las tablas. Para ello se

utiliza la cláusula WHERE. Esta cláusula permite colocar una condición que han de

cumplir todos los registros, los que no la cumplan no aparecen en el resultado.

Ejemplo:

SELECT Tipo, Modelo FROM Pieza WHERE Precio>3;

Page 46: Basico de Oracle

OPERADORES DE COMPARACIÓN

Se pueden utilizar en la cláusula WHERE, son:

Operador Significado

> Mayor que

< Menor que

>= Mayor o igual que

<= Menor o igual que

= Igual

<> Distinto

!= Distinto

Se pueden utilizar tanto para comparar números como para comparar textos y fechas. En

el caso de los textos, las comparaciones se hacen en orden alfabético. Sólo que es un

orden alfabético estricto. Es decir el orden de los caracteres en la tabla de códigos.

Así la letra Ñ y las vocales acentuadas nunca quedan bien ordenadas ya que figuran con

códigos más altos. Las mayúsculas figuran antes que las minúsculas (la letra 'Z' es

menor que la 'a').

BETWEEN

El operador BETWEEN nos permite obtener datos que se encuentren en un rango. Uso:

SELECT tipo,modelo,precio FROM piezas

WHERE precio BETWEEN 3 AND 8;

Saca piezas cuyos precios estén entre 3 y 8 (ambos incluidos).

IN

Permite obtener registros cuyos valores estén en una lista:

SELECT tipo,modelo,precio FROM piezas

WHERE precio IN (3,5, 8);

Obtiene piezas cuyos precios sea 3, 5 u 8, sólo uno de esos tres.

LIKE

Se usa sobre todo con textos, permite obtener registros cuyo valor en un campo cumpla

una condición textual. LIKE utiliza una cadena que puede contener estos símbolos:

Page 47: Basico de Oracle

Símbolo Significado

% Una serie cualquiera de caracteres

_ Un carácter cualquiera

Ejemplos:

/* Selecciona nombres que empiecen por S */

SELECT nombre FROM personas WHERE nombre LIKE 'A%';

/*Selecciona las personas cuyo apellido sea Sanchez, Senchez,

Stnchez,...*/

SELECT apellido1 FROM Personas WHERE apellido1 LIKE 'S_nchez';

IS NULL

Devuelve verdadero si una expresión contiene un nulo:

SELECT nombre,apellidos FROM personas

WHERE telefono IS NULL

Esa instrucción selecciona a la gente que no tiene teléfono

Precedencia de operadores

A veces las expresiones que se producen en los SELECT son muy extensas y es difícil

saber que parte de la expresión se evalúa primero, por ello se indica la siguiente tabla de

precedencia:

Page 48: Basico de Oracle

ORDENACIÓN

El orden inicial de los registros obtenidos por un SELECT no guarda más que una

relación respecto al orden en el que fueron introducidos. Para ordenar en base a criterios

más interesantes, se utiliza la cláusula ORDER BY.

En esa cláusula se coloca una lista de campos que indica la forma de ordenar. Se ordena

primero por el primer campo de la lista, si hay coincidencias por el segundo, si ahí

también las hay por el tercero, y así sucesivamente.

Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras

significan en ascendente (de la A a la Z, de los números pequeños a los grandes) o en

descendente (de la Z a la a, de los números grandes a los pequeños) respectivamente.

Sintaxis completa de SELECT:

SELECT expresiones

FROM tabla

[WHERE condición]

ORDER BY listaDeCamposOAlias;

FUNCIONES

Oracle incorpora una serie de instrucciones que permiten realizar cálculos avanzados, o

bien facilitar la escritura de ciertas expresiones. Todas las funciones reciben datos para

poder operar (parámetros) y devuelven un resultado (que depende de los parámetros

enviados a la función. Los argumentos se pasan entre paréntesis:

nombreFunción[(parámetro1[, parámetro2,...])]

Si una función no precisa parámetros (como SYSDATE) no hace falta colocar los

paréntesis.

Las hay de dos tipos:

Funciones que operan con una sola fila

Funciones que operan con varias filas.

FUNCIONES DE CARACTERES

Conversión del texto a mayúsculas y minúsculas

Son:

Page 49: Basico de Oracle

FUNCIONES DE TRANSFORMACIÓN

REDONDEOS

Page 50: Basico de Oracle

MATEMÁTICAS

Funciones De Trabajo Con Nulos

Permiten definir valores a utilizar en el caso de que las expresiones tomen el valor nulo.

Funciones De Fecha

Las fechas se utilizan muchísimo en todas las bases de datos. Oracle proporciona dos

tipos de datos para manejar fechas, los tipos DATE y TIMESTAMP. En el primer caso

se almacena una fecha concreta (que incluso puede contener la hora), en el segundo

Page 51: Basico de Oracle

caso se almacena un instante de tiempo más concreto que puede incluir incluso

fracciones de segundo.

Obtener La Fecha Y Hora Actual

Calcular Fechas

TO_CHAR

Obtiene un texto a partir de un número o una fecha. En especial se utiliza con fechas (ya

que de número a texto se suele utilizar de forma implícita. fechas

Page 52: Basico de Oracle

En el caso de las fechas se indica el formato de conversión, que es una cadena que

puede incluir estos símbolos (en una cadena de texto):

Ejemplos:SELECT TO_CHAR(SYSDATE, 'DD/MONTH/YYYY, DAY HH:MI:SS')FROM DUAL/* Sale : 16/AGOSTO /2004, LUNES 08:35:15, por ejemplo

TO_NUMBER

Convierte textos en números. Se indica el formato de la conversión (utilizando los

mismos símbolos que los comentados anteriormente).

TO_DATE

Convierte textos en fechas. Como segundo parámetro se utilizan los códigos de formato

de fechas comentados anteriormente.

Page 53: Basico de Oracle

Funciones Condicionales

CASE

Es una instrucción incorporada a la versión 9 de Oracle que permite establecer

condiciones de salida (al estilo if-then-else de muchos lenguajes). Sintaxis:

CASE expresión WHEN valor1 THEN resultado1

[ WHEN valor2 THEN resultado2 ....

...

ELSE resultadoElse

]

END

El funcionamiento es el siguiente:

1> Se evalúa la expresión indicada

2> Se comprueba si esa expresión es igual al valor del primer WHEN, de ser así se

devuelve el primer resultado (cualquier valor excepto nulo)

3> Si la expresión no es igual al valor 1, entonces se comprueba si es igual que el segundo.

De ser así se escribe el resultado 3. De no ser así se continua con el siguiente WHEN

4> El resultado indicado en la zona ELSE sólo se escribe si la expresión no vale ningún

valor de los indicados.

Ejemplo:

SELECT

CASE cotizacion WHEN 1 THEN salario*0.85

WHEN 2 THEN salario * 0.93

WHEN 3 THEN salario * 0.96

ELSE salario

END

FROM empleados;

FUNCIÓN DECODE

Similar a la anterior pero en forma de función. Se evalúa una expresión y se colocan a

continuación pares valor, resultado de forma que si se la expresión equivale al valor, se obtiene

el resultado indicado. Se puede indicar un último parámetro con el resultado a efectuar en caso

de no encontrar ninguno de los valores indicados.

Sintaxis:

DECODE(expresión, valor1, resultado1

[,valor2, resultado2,...]

[,valorPordefecto])

Page 54: Basico de Oracle

Ejemplo:

SELECT

DECODE(cotizacion,1, salario*0.85,

2,salario * 0.93,

3,salario * 0.96,

salario)

FROM empleados;

Este ejemplo es idéntico al utilizado para la instrucción CASE

OBTENER DATOS DE MÚLTIPLES TABLAS

Es más que habitual necesitar en una consulta datos que se encuentran distribuidos en varias

tablas. Las bases de datos relacionales se basan en que los datos se distribuyen en tablas que se

pueden relacionar mediante un campo. Ese campo es el que permite integrar los datos de las

tablas.

Por ejemplo si disponemos de una tabla de empleados cuya clave es el dni y otra tabla de tareas

que se refiere a tareas realizadas por los empleados, es seguro (si el diseño está bien hecho) que

en la tabla de tareas aparecerá el dni del empleado para saber qué empleado realizó la tarea.

Producto Cruzado O Cartesiano De Tablas

En el ejemplo anterior si quiere obtener una lista de los datos de las tareas y los empleados, se

podría hacer de esta forma:

SELECT cod_tarea, descripcion_tarea, dni_empleado,

nombre_empleado

FROM tareas,empleados;

La sintaxis es correcta ya que, efectivamente, en el apartado FROM se pueden indicar varias

tareas separadas por comas. Pero eso produce un producto cruzado, aparecerán todos los

registros de las tareas relacionados con todos los registros de empleados.

El producto cartesiano a veces es útil para realizar consultas complejas, pero en el caso normal

no lo es. necesitamos discriminar ese producto para que sólo aparezcan los registros de las

tareas relacionadas con sus empleados correspondientes. A eso se le llama asociar (join) tablas

Asociando Tablas

La forma de realizar correctamente la consulta anterior (asociado las tareas con los empleados

que la realizaron sería:

SELECT cod_tarea, descripcion_tarea, dni_empleado,

nombre_empleado

FROM tareas,empleados

WHERE tareas.dni_empleado = empleados.dni;

Page 55: Basico de Oracle

Nótese que se utiliza la notación tabla.columna para evitar la ambigüedad, ya que el mismo

nombre de campo se puede repetir en ambas tablas. Para evitar repetir continuamente el nombre

de la tabla, se puede utilizar un alias de tabla:

SELECT a.cod_tarea, a.descripcion_tarea, b.dni_empleado,

b.nombre_empleado

FROM tareas a,empleados b

WHERE a.dni_empleado = b.dni;

Al apartado WHERE se le pueden añadir condiciones encadenándolas con el operador

AND. Ejemplo:

SELECT a.cod_tarea, a.descripcion_tarea

FROM tareas a,empleados b

WHERE a.dni_empleado = b.dni AND b.nombre_empleado='Javier';

Finalmente indicar que se pueden enlazar más de dos tablas a través de sus campos

relacionados. Ejemplo:

SELECT a.cod_tarea, a.descripcion_tarea, b.nombre_empleado,

c.nombre_utensilio

FROM tareas a,empleados b, utensilios_utilizados c

WHERE a.dni_empleado = b.dni AND a.cod_tarea=c.cod_tarea;

INSERCIÓN DE DATOS

La adición de datos a una tabla se realiza mediante la instrucción INSERT. Su sintaxis

fundamental es:

INSERT INTO tabla [(listaDeCampos)]

VALUES (valor1 [,valor2 ...])

La tabla representa la tabla a la que queremos añadir el registro y los valores que siguen

a VALUES son los valores que damos a los distintos campos del registro. Si no se

especifica la lista de campos, la lista de valores debe seguir el orden de las columnas

según fueron creados (es el orden de columnas según las devuelve el comando

DESCRIBE).

La lista de campos a rellenar se indica si no queremos rellenar todos los campos. Los

campos no rellenados explícitamente con la orden INSERT, se rellenan con su valor por

defecto (DEFAULT) o bien con NULL si no se indicó valor alguno. Si algún campo

tiene restricción de tipo NOT NULL, ocurrirá un error si no rellenamos el campo con

algún valor.

Page 56: Basico de Oracle

Por ejemplo, supongamos que tenemos una tabla de clientes cuyos campos son: dni,

nombre, apellido1, apellido2, localidad y dirección; supongamos que ese es el orden de

creación de los campos de esa tabla y que la localidad tiene como valor por defecto

Palencia y la dirección no tienen valor por defecto. En ese caso estas dos instrucciones

son equivalentes:

INSERT INTO clientes

VALUES('11111111','Pedro','Gutiérrez', 'Crespo',DEFAULT,NULL);

INSERT INTO clientes(dni,nombre,apellido1,apellido2)

VALUES('11111111','Pedro','Gutiérrez', 'Crespo')

Son equivalentes puesto que en la segunda instrucción los campos no indicados se

rellenan con su valor por defecto y la dirección no tiene valor por defecto. La palabra

DEFAULT fuerza a utilizar ese valor por defecto.

ACTUALIZACIÓN DE REGISTROS

La modificación de los datos de los registros lo implementa la instrucción UPDATE.

Sintaxis:

UPDATE tabla

SET columna1=valor1 [,columna2=valor2...]

[WHERE condición]

Se modifican las columnas indicadas en el apartado SET con los valores indicados. La

cláusula WHERE permite especificar qué registros serán modificados.

Ejemplos:

UPDATE clientes SET provincia='Ourense'

WHERE provincia='Orense';

UPDATE productos SET precio=precio*1.16;

El primer dato actualiza la provincia de los clientes de Orense para que aparezca como

Ourense. El segundo UPDATE incrementa los precios en un 16%. La expresión para el

valor puede ser todo lo compleja que se desee:

UPDATE partidos SET fecha= NEXT_DAY(SYSDATE,'Martes')

WHERE fecha=SYSDATE;

BORRADO DE REGISTROS

Se realiza mediante la instrucción DELETE:

DELETE [FROM] tabla

Page 57: Basico de Oracle

[WHERE condición]

Es más sencilla que el resto, elimina los registros de la tabla que cumplan la condición

indicada. Ejemplos:

DELETE FROM empleados

WHERE seccion=23;

DELETE FROM empleados

WHERE id_empleado IN (SELECT id_empleado FROM errores_graves);

Hay que tener en cuenta que el borrado de un registro no puede provocar fallos de

integridad y que la opción de integridad ON DELETE CASCADE (véase página 21,

clave secundaria o foránea) hace que no sólo se borren los registros indicados en el

SELECT, sino todos los relacionados.

TRANSACCIONES

Como se ha comentado anteriormente, una transacción está formada por una serie de

instrucciones DML. Una transacción comienza con la primera instrucción DML que se

ejecute y finaliza con alguna de estas circunstancias:

Una operación COMMIT o ROLLBACK

Una instrucción DDL (como ALTER TABLE por ejemplo)

Una instrucción DCL (como GRANT)

El usuario abandona la sesión

Caída del sistema

Hay que tener en cuenta que cualquier instrucción DDL o DCL da lugar a un COMMIT

implícito, es decir todas las instrucciones DML ejecutadas hasta ese instante pasan a ser

definitivas.

COMMIT

La instrucción COMMIT hace que los cambios realizados por la transacción sean

definitivos, irrevocables. Sólo se debe utilizar si estamos de acuerdo con los cambios,

conviene asegurarse mucho antes de realizar el COMMIT ya que las instrucciones

ejecutadas pueden afectar a miles de registros.

Además el cierre correcto de la sesión da lugar a un COMMIT, aunque siempre

conviene ejecutar explícitamente esta instrucción a fin de asegurarnos de lo que

hacemos.

ROLLBACK

Page 58: Basico de Oracle

Esta instrucción regresa a la instrucción anterior al inicio de la transacción,

normalmente el último COMMIT, la última instrucción DDL o DCL o al inicio de

sesión. Anula definitivamente los cambios, por lo que conviene también asegurarse de

esta operación.

Un abandono de sesión incorrecto o un problema de comunicación o de caída del

sistema dan lugar a un ROLLBACK implícito.

SAVEPOINT

Esta instrucción permite establecer un punto de ruptura. El problema de la combinación

ROLLBACK/COMMIT es que un COMMIT acepta todo y un ROLLBACK anula todo.

SAVEPOINT permite señalar un punto intermedio entre el inicio de la transacción y la

situación actual. Su sintaxis es:

...instrucciones DML...

SAVEPOINT nombre

....instrucciones DML...

Para regresar a un punto de ruptura concreto se utiliza ROLLBACK TO SAVEPOINT

seguido del nombre dado al punto de ruptura. Cuando se vuelve a un punto marcado, las

instrucciones que siguieron a esa marca se anulan definitivamente.

Estado De Los Datos Durante La Transacción

Si se inicia una transacción usando comandos DML hay que tener en cuenta que:

Se puede volver a la instrucción anterior a la transacción cuando se desee

Las instrucciones de consulta SELECT realizadas por el usuario que inició la

transacción muestran los datos ya modificados por las instrucciones DML

El resto de usuarios ven los datos tal cual estaban antes de la transacción, de

hecho los registros afectados por la transacción aparecen bloqueados hasta que

la transacción finalice. Esos usuarios no podrán modificar los valores de dichos

registros.

Tras la transacción todos los usuarios ven los datos tal cual quedan tras el fin de

transacción. Los bloqueos son liberados y los puntos de ruptura borrados.

CONSULTAS

Page 59: Basico de Oracle

SQL> DECLARE 2 A NUMBER; 3 B NUMBER; 4 C NUMBER; 5 BEGIN 6 A:=5; 7 B:=&VALORB; 8 C:=A+B; 9 DBMS_OUTPUT.PUT_LINE('LA SUMA ES:'||C); 10 END; 11 /Introduzca un valor para valorb: 7antiguo 7: B:=&VALORB;nuevo 7: B:=7;LA SUMA ES:12 Procedimiento PL/SQL terminado con éxito.SQL> DECLARE

2 CONTADOR NUMBER:=0;

3 BEGIN

4 LOOP

5 DBMS_OUTPUT.PUT(CONTADOR||'');

6 CONTADOR:=CONTADOR+1;

7 EXIT WHEN CONTADOR=10;

8 END LOOP;

9 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO');

10 END;

11 /

0123456789FIN DEL CICLO

Procedimiento PL/SQL terminado con éxito.

SQL> DECLARE 2 CONTADOR NUMBER:=0; 3 BEGIN 4 WHILE CONTADOR<10 LOOP 5 DBMS_OUTPUT.PUT(CONTADOR||''); 6 CONTADOR:=CONTADOR+1; 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO'); 9 END; 10 /0123456789FIN DEL CICLO Procedimiento PL/SQL terminado con éxito.

Page 60: Basico de Oracle

SQL> DECLARE 2 CONTADOR NUMBER:=0; 3 BEGIN 4 FOR CONTADOR IN 1..10 LOOP 5 DBMS_OUTPUT.PUT(CONTADOR||''); 6 END LOOP; 7 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO'); 8 END; 9 /12345678910FIN DEL CICLO

Procedimiento PL/SQL terminado con éxito.SQL> DECLARE 2 X NUMBER; 3 BEGIN 4 X:=&VALORX; 5 IF (X MOD 2= 0) THEN DBMS_OUTPUT.PUT('MULTIPLO/2'); 6 ELSIF X MOD 3 =0 THEN DBMS_OUTPUT.PUT('MULTIPLO/3'); 7 ELSIF X MOD 5 = 0 THEN DBMS_OUTPUT.PUT('MULTIPLO/5'); 8 ELSE DBMS_OUTPUT.PUT('MULTIPLO DE OTRO NUMERO'); 9 END IF; 10 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO'); 11 END; 12 /Introduzca un valor para valorx: 4antiguo 4: X:=&VALORX;nuevo 4: X:=4;MULTIPLO/2FIN DEL CICLO

Procedimiento PL/SQL terminado con éxito.

SQL> DECLARE 2 X NUMBER; 3 BEGIN 4 X:=&VALORX; 5 IF (X MOD 2= 0) THEN DBMS_OUTPUT.PUT('MULTIPLO/2'); 6 ELSIF X MOD 3 =0 THEN DBMS_OUTPUT.PUT('MULTIPLO/3'); 7 ELSIF X MOD 5 = 0 THEN DBMS_OUTPUT.PUT('MULTIPLO/5'); 8 ELSE DBMS_OUTPUT.PUT('MULTIPLO DE OTRO NUMERO'); 9 END IF; 10 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO'); 11 END; 12 /Introduzca un valor para valorx: 5antiguo 4: X:=&VALORX;nuevo 4: X:=5;MULTIPLO/5FIN DEL CICLO

Procedimiento PL/SQL terminado con éxito.

Page 61: Basico de Oracle

SQL> DECLARE 2 X NUMBER; 3 BEGIN 4 X:=&VALORX; 5 IF (X MOD 2= 0) THEN DBMS_OUTPUT.PUT('MULTIPLO/2'); 6 ELSIF X MOD 3 =0 THEN DBMS_OUTPUT.PUT('MULTIPLO/3'); 7 ELSIF X MOD 5 = 0 THEN DBMS_OUTPUT.PUT('MULTIPLO/5'); 8 ELSE DBMS_OUTPUT.PUT('MULTIPLO DE OTRO NUMERO'); 9 END IF; 10 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO'); 11 END; 12 /Introduzca un valor para valorx: 8antiguo 4: X:=&VALORX;nuevo 4: X:=8;MULTIPLO/2FIN DEL CICLO

Procedimiento PL/SQL terminado con éxito.

SQL> DECLARE 2 X NUMBER; 3 BEGIN 4 X:=&VALORX; 5 IF (X MOD 2= 0) THEN DBMS_OUTPUT.PUT('MULTIPLO/2'); 6 ELSIF X MOD 3 =0 THEN DBMS_OUTPUT.PUT('MULTIPLO/3'); 7 ELSIF X MOD 5 = 0 THEN DBMS_OUTPUT.PUT('MULTIPLO/5'); 8 ELSE DBMS_OUTPUT.PUT('MULTIPLO DE OTRO NUMERO'); 9 END IF; 10 DBMS_OUTPUT.PUT_LINE('FIN DEL CICLO'); 11 END; 12 /Introduzca un valor para valorx: 9antiguo 4: X:=&VALORX;nuevo 4: X:=9;MULTIPLO/3FIN DEL CICLO

Procedimiento PL/SQL terminado con éxito.

SQL> CREATE TABLE SUELDO( 2 NUM_EMP CHAR(5), 3 NOMB VARCHAR(30), 4 NHORAS NUMBER, 5 VHORA NUMBER);

Tabla creada.

Page 62: Basico de Oracle

SQL> INSERT INTO SUELDO VALUES(1,'JUANITO JOSE','10','50');

1 fila creada.

SQL> COMMIT 2 ;

Validación terminada.

SQL> INSERT INTO SUELDO VALUES(1,'JUANITO JOSE','10','50');

1 fila creada.

SQL> INSERT INTO SUELDO VALUES(2,'JUAN JOSE CASTRO','5','50');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> INSERT INTO SUELDO VALUES(3,'MARIA JOSE','4','50');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID ------------------------------ ------- --------- CATEGORIAS TABLE CLIENTES TABLE COMPRAS TABLE DETALLE_COMPRAS TABLE DETALLE_VENTAS TABLE PRODUCTOS TABLE PROVEEDORES TABLE SUELDO TABLE SUELDOS TABLE VENTAS TABLE

10 filas seleccionadas.

SQL> SELECT * FROM SUELDO;

NUM_E NOMB NHORAS VHORA ----- ------------------------------ --------- ---------

Page 63: Basico de Oracle

1 JUANITO JOSE 10 50 1 JUANITO JOSE 10 50 2 JUAN JOSE CASTRO 5 50 3 MARIA JOSE 4 50

SQL> DECLARE 2 MCODIGO CHAR(6); 3 MNOMB VARCHAR(30); 4 MNUMHORAS NUMBER; 5 MVALHORA NUMBER; 6 MSUELDO NUMBER; 7 BEGIN 8 MCODIGO:=&CODIGO; 9 SELECT NOMB INTO MNOMB FROM SUELDO 10 WHERE NUM_EMP=MCODIGO; 11 SELECT NHORAS INTO MNUMHORAS FROM SUELDO 12 WHERE NUM_EMP=MCODIGO; 13 SELECT VHORA INTO MVALHORA FROM SUELDO 14 WHERE NUM_EMP= MCODIGO; 15 MSUELDO:=MNUMHORAS * MVALHORA; 16 DBMS_OUTPUT.PUT_LINE(MNOMB||'SU SUELDO ES:'||MSUELDO); 17 END; 18 /Introduzca un valor para codigo: 2antiguo 8: MCODIGO:=&CODIGO;nuevo 8: MCODIGO:=2;JUAN JOSE CASTROSU SUELDO ES:250

Procedimiento PL/SQL terminado con éxito.

SQL> DECLARE 2 MCODIGO CHAR(6); 3 MNOMB VARCHAR(30); 4 MNUMHORAS NUMBER; 5 MVALHORA NUMBER; 6 MSUELDO NUMBER; 7 BEGIN 8 MCODIGO:=&CODIGO; 9 SELECT NOMB INTO MNOMB FROM SUELDO 10 WHERE NUM_EMP=MCODIGO; 11 SELECT NHORAS INTO MNUMHORAS FROM SUELDO 12 WHERE NUM_EMP=MCODIGO; 13 SELECT VHORA INTO MVALHORA FROM SUELDO

Page 64: Basico de Oracle

14 WHERE NUM_EMP= MCODIGO; 15 MSUELDO:=MNUMHORAS * MVALHORA; 16 DBMS_OUTPUT.PUT_LINE(MNOMB||'SU SUELDO ES:'||MSUELDO); 17 END; 18 /Introduzca un valor para codigo: 3antiguo 8: MCODIGO:=&CODIGO;nuevo 8: MCODIGO:=3;MARIA JOSESU SUELDO ES:200

Procedimiento PL/SQL terminado con éxito.

SQL> AFTER TABLE SUELDOcomando desconocido principio "AFTER TABL..." - resto de la línea ignorado.SQL> ALTER TABLE SUELDO 2 ADD TRANSPORTE NUMBER(10,2), 3 ADD BONO NUMBER(10,2), 4 ADD IESS NUMBER(10,2), 5 ADD MULTAS NUMBER(10,2);ALTER TABLE SUELDO

SQL> ALTER TABLE SUELDO 2 ADD TRANSPORTE NUMBER(10,2);

Tabla modificada.

SQL> ALTER TABLE SUELDO 2 ADD BONO NUMBER(10,2);

Tabla modificada.

SQL> ALTER TABLE SUELDO 2 ADD IESS NUMBER(10,2);

Tabla modificada.

SQL> ALTER TABLE SUELDO 2 ADD MULTAS NUMBER(10,2);

Tabla modificada.

SQL> SELECT * FROM SUELDO;

NUM_E NOMB NHORAS VHORA TRANSPORTE BONO IESS MULTAS ----- ------------------------------ --------- --------- ---------- --------- --------- --------- 1 JUANITO JOSE 10 50 1 JUANITO JOSE 10 50 2 JUAN JOSE CASTRO 5 50

Page 65: Basico de Oracle

3 MARIA JOSE 4 50

SQL> INSERT INTO SUELDO VALUES(4,'PATRISIO SANGOKIZA','100','50','20','40','30','5');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> INSERT INTO SUELDO VALUES(5,'MARIA EUGENIA','50','50','15','30','25','10');

1 fila creada.

SQL> COMMIT, 2 INSERT INTO SUELDO VALUES(6,'JULIO CESAR','60','50','20','20','30','20');COMMIT,*ERROR en línea 1: ORA-02185: COMMIT va seguido de un elemento distinto de WORK

SQL> INSERT INTO SUELDO VALUES(6,'JULIO CESAR','60','50','20','20','30','20');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> INSERT INTO SUELDO VALUES(5,'MARIA EUGENIA','50','50','15','30','25','10');

1 fila creada.

SQL> COMMIT;

Validación terminada.

SQL> SELECT * FROM SUELDO;

NUM_E NOMB NHORAS VHORA TRANSPORTE BONO IESS MULTAS ----- ------------------------------ --------- --------- ---------- --------- --------- --------- 1 JUANITO JOSE 10 50 1 JUANITO JOSE 10 50 2 JUAN JOSE CASTRO 5 50 3 MARIA JOSE 4 50

Page 66: Basico de Oracle

4 PATRISIO SANGOKIZA 100 50 20 40 30 5 5 MARIA EUGENIA 50 50 15 30 25 10 6 JULIO CESAR 60 50 20 20 30 20 5 MARIA EUGENIA 50 50 15 30 25 10

8 filas seleccionadas.

SQL> DECLARE 2 MCODIGO CHAR(6); 3 MNOMB VARCHAR(30); 4 MNUMHORAS NUMBER; 5 MVALHORA NUMBER; 6 MSUELDO NUMBER; 7 MTRANSPORTE NUMBER; 8 MBONO NUMBER; 9 MIESS NUMBER; 10 MMULTAS NUMBER; 11 MTOTAL_RECIBE NUMBER; 12 BEGIN 13 MCODIGO:=&CODIGO; 14 SELECT NOMB INTO MNOMB FROM SUELDO 15 WHERE NUM_EMP=MCODIGO; 16 SELECT NHORAS INTO MNUMHORAS FROM SUELDO 17 WHERE NUM_EMP=MCODIGO; 18 SELECT VHORA INTO MVALHORA FROM SUELDO 19 WHERE NUM_EMP= MCODIGO; 20 SELECT TRANSPORTER INTO MTRANSPORTE FROM SUELDO 21 WHERE NUM_EMP = CODIGO; 22 SELECT BONO INTO MBONO FROM SUELDO 23 WHERE NUM_EMP=MCODIGO; 24 SELECT IESS INTO MIESS FROM SUELDO 25 WHERE NUM_EMP=MCODIGO; 26 SELECT MULTAS INTO MMULTAS FROM SUELDO 27 WHERE NUM_EMP=MCODIGO; 28 MSUELDO:=MNUMHORAS * MVALHORA +MBONO-(MTRASPORTE-MIESS); 29 DBMS_OUTPUT.PUT_LINE(MNOMB||'SU SUELDO ES:'||MSUELDO); 30 END; 31 /Introduzca un valor para codigo: 6antiguo 13: MCODIGO:=&CODIGO;nuevo 13: MCODIGO:=6;DECLARE*ERROR en línea 1: ORA-06550: línea 21, columna 17: PL/SQL: ORA-00904: "CODIGO": identificador no válido ORA-06550: línea 20, columna 1: PL/SQL: SQL Statement ignored ORA-06550: línea 28, columna 39:

Page 67: Basico de Oracle

PLS-00201: el identificador 'MTRASPORTE' se debe declarar ORA-06550: línea 28, columna 1: PL/SQL: Statement ignored

SQL> DECLARE 2 MCODIGO CHAR(6); 3 MNOMB VARCHAR(30); 4 MNUMHORAS NUMBER; 5 MVALHORA NUMBER; 6 MSUELDO NUMBER; 7 MTRANSPORTE NUMBER; 8 MBONO NUMBER; 9 MIESS NUMBER; 10 MMULTAS NUMBER; 11 MTOTAL_RECIBE NUMBER; 12 BEGIN 13 MCODIGO:=&CODIGO; 14 SELECT NOMB INTO MNOMB FROM SUELDO 15 WHERE NUM_EMP=MCODIGO; 16 SELECT NHORAS INTO MNUMHORAS FROM SUELDO 17 WHERE NUM_EMP=MCODIGO; 18 SELECT VHORA INTO MVALHORA FROM SUELDO 19 WHERE NUM_EMP= MCODIGO; 20 SELECT TRANSPORTER INTO MTRANSPORTE FROM SUELDO 21 WHERE NUM_EMP = MCODIGO; 22 SELECT BONO INTO MBONO FROM SUELDO 23 WHERE NUM_EMP=MCODIGO; 24 SELECT IESS INTO MIESS FROM SUELDO 25 WHERE NUM_EMP=MCODIGO; 26 SELECT MULTAS INTO MMULTAS FROM SUELDO 27 WHERE NUM_EMP=MCODIGO; 28 MSUELDO:=MNUMHORAS * MVALHORA +MBONO-(MTRASPORTE-MIESS); 29 DBMS_OUTPUT.PUT_LINE(MNOMB||'SU SUELDO ES:'||MSUELDO); 30 END; 31 /