You are on page 1of 66

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
MANUAL DE ORACLE
COMO INSTALAR

PARA INSTALAR UN SERVIDOR:


1º INSTALAR DEVELOPER
2º SERVIDOR ORCLE DATABASE
CLAVE EN SOFWARE
NOMBRE EMPRESA:
DIRECTORIO ALMACENAMIENTO C:/ORANT
C:/ORANT SI
TÍ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.jar
Nombre: HOME_ORADATA_9I
RUTA DE ACCESO C:\ORACLE\DATABASE

SIGUIENTE:

ORACLE9IDATABASE 9.2.0.1
SIGUIENTE:
TIPO DE INSTALACION

ESTANDARS
SIGUEINTE

CONFIGURACION DE BASE DE DATOS

1 USO GENERAL
SIGUIENTE

NUMERO DE PUERTO 2030


SIGUIENTE

NOMBRE DE LA BASE DE DATOS GLOBAL


SE COMUNICAN:

CUANDO HAY UNA GRANJA DE SERVIDORES O CLIENTES DE OTROS


SERVIDORES
EL SID ES EL NOMBRES IDENTIFICA A LOS CLIENTES DE UN SERVIDOR
LOCAL
NOMBRE 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

INSTALAR
RUTA DE ACCESO UBICACION DEL DISCO

BUSCO LAS CARPETAS DISK2 OK


BUSCO DISK3 OK

AL FINAL LOS USUARIOS


SYS 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

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

CLIENTE red transporte TCP/IP

CUAL ES EL SERVIDOR
CUAL ES LA INSTANCIA (SID)
USUARIO/ CONTRASEÑA
EL CLIENTE:
LAB2-3/192.168.2.22
ORCL
SYSTEM/MASTER
SE TRABAJA EN: SQL PLUS
CONFIGURACION DEL CLIENTE

INICIO TODOS LOS PROGRAMAS


ORACLE PARA WINDOWS NT
SQL NET EASY CONFIGURATIION CLICK
add database alias a la base de datos orcl_click1 ok

choose protocol TCP/IP

NOMBRE DE HOST AND DATABASE INSTANCE


192.168.2.22

ASEMOS PING
192.168.2.22
TNSPING ORCL_CLI1 ENTER

CONECCIONES ODBC

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

CREAR CONECCION NATIVA

PANEL DE CONTROL
ORIGEN DE DATOS
ODBC
DNS DEL SISTEMA
ACCESS NUEVO
DATOS EXTERNOS
ENLAZAMOS A SCOTT
POR LO GENERAL NOS MUESTRA LAS TALAS DE EL USUARIO SCOTT

HERRAMIENTAS

SENTENCIAS
SQL> DDL: DATA DEFINITION LANGUAJE
DML: DATA MANIPULATION LENGUAJE

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 FAT


Tipo de Instalación Oracle Home Drive
Enterprise Edition 4.75 GB
Standard Edition 4.5 GB
Personal Edition 4.75 GB
Administrator 1.5 GB
Runtime 400 MB
Oracle Management Server 1.5 GB
Oracle Internet Directory 4 GB

Requerimiento de espacio en disco duro para NTFS


Tipo de Instalación Oracle Home Drive
Enterprise Edition 2.85 GB
Standard Edition 2.8 GB
Personal Edition 2.75 GB
Administrator 790 MB
Runtime 150 MB
Oracle Management Server 945 MB
Oracle 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.


3. Instale Oracle9i en este directorio. Asegurese que diga OraHome92 en el campo
Nombre, 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.

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.

• 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.

• 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
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.

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.

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.
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.
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.
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.
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
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
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,

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.


➢ 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:
➢ 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
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 USER
El usuario es "SYSTEM"
SQL> CREATE USER US3
2 IDENTIFIED BY PUS3
3 PASSWORD EXPIRE
4 ACCOUNT LOCK;
Usuario creado
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 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;

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 @SEPTIMO


Conectado.
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;

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
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
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 @SEPTIMO


Conectado.

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 USER


el usuario es "SYSTEM"
SQL> CONNECT INVENTARIOUS3/PATRICIO @SEPTIMO
Conectado.

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.
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));

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.

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
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:
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

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)
[,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.
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)
);
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
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;
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.

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),
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(
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.
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;
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:
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:

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:
FUNCIONES DE TRANSFORMACIÓN

REDONDEOS
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
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
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.

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])
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;
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.
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
[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
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

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: 7
antiguo 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.

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: 4
antiguo 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: 5
antiguo 4: X:=&VALORX;
nuevo 4: X:=5;
MULTIPLO/5FIN 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: 8
antiguo 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: 9
antiguo 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.

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


----- ------------------------------ --------- ---------
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: 2
antiguo 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
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: 3
antiguo 8: MCODIGO:=&CODIGO;
nuevo 8: MCODIGO:=3;
MARIA JOSESU SUELDO ES:200

Procedimiento PL/SQL terminado con éxito.

SQL> AFTER TABLE SUELDO


comando 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
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
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: 6
antiguo 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:
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 /

You might also like