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 CHECK(CANT_VEN >0), 4COST_VEN 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. NUMBER (10,2) CONSTRAINT CH_COSTVEN NUMBER (10) CONSTRAINT CH_CANTVEN

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 SANGOKIZA','100','50','20','40','30','5'); 1 fila creada. SQL> COMMIT; Validación terminada. SQL> INSERT INTO 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'); SUELDO VALUES(5,'MARIA SUELDO VALUES(4,'PATRISIO

1 fila creada. SQL> COMMIT; Validación terminada. SQL> INSERT INTO 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; SUELDO VALUES(5,'MARIA

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-(MTRASPORTEMIESS); 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-(MTRASPORTEMIESS); 29 DBMS_OUTPUT.PUT_LINE(MNOMB||'SU SUELDO ES:'||MSUELDO); 30 END; 31 /

Sign up to vote on this title
UsefulNot useful