Anda di halaman 1dari 214

SQL*Plus y SQL

Temas del Curso


Introduccin a Oracle Objetos de la base de datos Terminologa Dos Tipos de ordenes SQL SQL*Plus a Introduccin Seleccionando columnas Seleccionando renglones Visualizando el diccionario de datos Nomenclatura para la creacin de tablas y vistas Tipos de datos Constraints Creacin de Tablas Modificacin de Tablas

Temas del Curso


Continuacin:...
Definicin de vistas Creacin de vistas Vistas con alias para columnas Creacin de vistas con WHIT CHECK OPTION Accesos a tablas y vistas Otorgando privilegios a tablas y vistas Sinnimos Creacin de sinnimos Eliminar privilegios: REVOKE ndices Reglas para la creacin de ndices Creacin de ndices Eliminando ndices

Temas del Curso


Continuacin:...
Tablas del diccionario de datos para ndices Creacin de secuencias Insertando datos Actualizando datos Borrando datos Proceso de transacciones Valores y funciones numricas Referencia a valores y funciones numricas Valores y funciones de fechas Referencia a valores y funciones de carateer Otras funciones Funciones de grupo

Temas del Curso


Continuacin:... Comandos de SQL*Plus Creacin de un archivo de reporte Consultas avanzadas Subconsultas

Introduccin a Oracle

Objetos de la base de datos:

- TABLE: Objeto de la base de datos que almacena los datos.

- VIEW: Permite ver una seleccin personalizada de una o ms tablas, utilizando una consulta SQL que se almacena en la base de datos.
- INDEX: Permite el acceso rpido a los datos en las tablas.

- SYNONYM: Es un nombre alternativo de un objeto de base de datos


- SEQUENCE: Genera nmeros consecutivos, se puede mantener la integridad de los datos.

Objetos de la base de datos


- DATA DICTIONARY: Conjunto de tablas y vistas en las cuales Oracle contiene informacin sobre las tablas creadas por los usuario.
- ROLE: Conjunto de privilegios que se agrupan y conceden a los usuarios. - DATABASE LINK: Referencia a una base de datos remota.

Terminologa

DDL (Data Definition Languaje) . Sentencias SQL que se usan para la creacin de objetos en la base de datos y para la administracin de estos (CREATE, ALTER, GRANT) DML (Data Manipulation Languaje). Sentencias SQL usadas para la manipulacin de datos (INSERT, UPDATE, DELETE).
COMMIT: Guarda los registros en la base de datos. ROLLBACK: Accin que realiza Oracle cuando se realizan modificaciones a la base de datos y luego se decide no guardar esta accin en la base de datos.

Terminologa

QUERY: Recuperar o consultar informacin de la base de datos.


Programs Units: Las funciones son operaciones que se realizan sobre los datos y que modifican sus caractersticas. CONSTRAINTS: Reglas de integridad que se deben cumplir para los datos que se almacenan en la base de datos, existen diferentes reglas de integridad dependiente de los requerimientos del negocio.

Dos tipos de ordenes SQL

Las dos principales categoras de ordenes son: el DDL (Data Definition Languaje) y el DML (Data Manipulation Languaje)
DDL
-

** ESTRUCTURAS**

La creacin de un objeto de base de datos La eliminacin de un objeto de base de datos La modificacin de un objeto de la base de datos La concesin de privilegios sobre un objeto de la base de datos - La revocacin de privilegios sobre un objeto de la base de datos.

Dos tipos de ordenes SQL

ALTER TABLE
- Aade una columna, modifica una columna.

ALTER TABLE ADD CONSTRAINT


Aade un constraint a una tabla existente Crea una tabla. Crea un ndice. Elimina un tabla de la base de datos.

CREATE TABLE
-

CREATE INDEX
-

DROP TABLE
-

DROP INDEX
Elimina un ndice.

Dos tipos de ordenes SQL

GRANT
Otorga privilegios o roles a un usuario o a otro rol. Borra todas los registros de una tabla datos y libera espacio. Elimina los privilegios de un usuario o de un rol.

TRUNCATE
-

REVOKE
-

Dos tipos de ordenes SQL

DML
- Permite insertar, actualizar, borrar y seleccionar datos de la base de datos

INSERT
Inserta registros a una tabla Borra registros de una tabla

DELETE
-

UPDATE
- Modifica registros de una tabla

SELECT
Recupera registros de una tabla o vista

Dos tipos de ordenes SQL

COMMIT
Guarda los datos en la base de datos.

ROLLBACK
- Finaliza la transaccin sin guardar los datos en la base de datos.

SQL*Plus Introduccin

Para iniciar una sesin SQL*Plus (Windows)


- Pulse el icono SQL*Plus localizado en la carpeta Oracle para Windows NT - En el cuadro de dialogo CONNECT introduzca el nombre de usuario y contrasea: - Nombre de usuario : SCOTT - Contrasea: TIGER - Nombre del servicio: (se debe configurar primero el servicio usando Oracle Net8 Easy Config)

Salir de una sesin SQL - SQL> exit

Seleccionando Columnas

Sintaxis Bsica del QUERY:


SELECT ... FROM ...

Seleccionar todas las columnas de una tabla:


SELECT columna [,columna ,columna ...] FROM SELECT * FROM nombre_tabla nombre_tabla

Seleccionando Columnas

Despliegue todas las columnas de la tabla department


SQL> SELECT * 2 FROM department;

Use el comando DESCRIBE para desplegar los nombres de las columnas


SQL> DESC[RIBE] department

Para desplegar una columna en especifico


SQL> SELECT name 2 FROM department;

Seleccionando Columnas

Despliegue el nombre y nmero de todos los departments


SQL> SELECT name, department_id 2 FROM department;

La clusula DISTINCT despliega los valores nicos en una columna


SQL> SELECT DISTINCT columna [, columna] 2 FROM nombre_tabla;

Ejemplo: SQL> SELECT DISTINCT job_id 2 FROM employee;

Seleccionando Columnas

En el SELECT se pueden definir alias para los encabezados de columna


Despliegue job_id con el encabezado Trabajo
SQL> SELECT DISTINCT job_id Trabajo 2 FROM employee;

o para un encabezado con espacios en el nombre: SQL> SELECT DISTINCT job_id Id de Empleo 2 FROM employee;

Selecionando Renglones

La clusula WHERE permite especificar una condicin y seleccionar renglones especficos en un tabla SINTAXIS
SQL> SELECT columna [, columna ,columna ...] 2 3 4 FROM WHERE tabla condicin

[{AND|OR} condicin]

Seleccionando Renglones

Componentes de la condicin
- Nombre de la columna, expresin o constante - Operador de comparacin - Nombre de columna, expresin o constante

Las constantes tipo caracter y fecha se deben encerrar entre comillas simples. Las constantes tipo caracter son sensibles a maysculas y minsculas, y los datos tipo fecha deben estar en el formato DD-MON-YY (si est en ingls la instalacin).

Seleccionando Renglones

Operadores de comparacin:
= != <> > >= < <= BETWEEN.. AND.. IN (lista) IS NULL LIKE Igual a Diferente de Mayor que Mayor o igual a Menor que Menor o igual que Entre dos valores Igual a cualquier miembro de la lista Es un valor nulo Busca un patrn de caracteres

Seleccionando Renglones

Ejemplos:
Seleccione el nmero de empleado, apellido y salario para todos los empleados de el departamento 30 SQL> SELECT employee_id, last_name, salary 2 3 FROM employee WHERE department_id = 30;

Despliegue el nombre del empleado, puesto y salario para todos los empleados excepto los gerentes SQL> SELECT 2 3 FROM WHERE employee_id, job_i, salary employee job_id <> 671;

Seleccionando Renglones

El operador BETWEEN permite seleccionar renglones que contengan valores dentro de un rango
Despliegue el nombre del empleado, puesto, y nmero de departamento para aquellos contratados entre Enero 1 de 1982 y Enero 1 de 1983. SQL> SELECT last_name, job_id, department_id, hire_date 2 3 4 FROM employee WHERE hire_date BETWEEN to_date('01-JAN-82) AND to_date('01-JAN-83);

Seleccionando Renglones

El operador IN permite seleccionar valores que coincidan con uno de los valores en la lista
Despliegue el nombre del empleado, puesto y nmero de departamento para todos los empleados que estn en el puesto de CLERK y ANALYST. SQL> SELECT last_name, job_id, department_id 2 3 FROM employee WHERE job_id IN (667, 669);

Seleccionando Renglones

Valores nulos:
IS NULL e IS NOT NULL Listar todos los empleados que no son candidatos para recibir comisin (el valor de la columna comisin es NULO) SQL> SELECT last_name, job_id 2 3 FROM WHERE employee commission IS NULL;

Seleccionando Renglones

Para buscar una cadena de caracteres se utiliza el operador LIKE con algunos caracteres comodn:
% Igual a cualquier nmero de caracteres _ Igual a un solo carcter Despliegue el nombre del empleado, puesto, nmero de departamento y fecha de contrato para todos aquellos empleados cuyo apellido empiece M mayscula. SQL> SELECT last_name, job_id, department_id 2 ,hire_date 3 FROM employee 4 WHERE last_neme LIKE 'M%';

Seleccionando Renglones

Empleamos el operador NOT para negar condiciones con estos operadores:


NOT BETWEEN ... AND .. NOT IN (lista) IS NOT NULL NOT LIKE

Seleccionando Renglones

La clusula WHERE puede calificar y seleccionar renglones especificando mas de una condicin de bsqueda, estas condiciones se pueden unir por medio de expresiones lgicas: Expresiones lgicas
- AND - OR

Precedencia
- =,!=, >,>=,<,<=, IN, LIKE, IS NULL, BETWEEN. AND . - NOT, AND , OR - Para anular las reglas de precedencia coloque parntesis

Seleccionando Renglones
Despliegue el nombre del empleado, puesto y salario para los gerentes que ganen $1,500 o ms , tambin incluya a los vendedores. SQL> SELECT last_name, job_id, salary 2 FROM employee 3 WHERE salary >= 1500 4 AND job_id = 671 5 OR job_id =670; Despliegue nombre del empleado, puesto y salario para los gerentes y vendedores que ganen $1,500 o mas. SQL> SELECT last_name, job_id, salary 2 FROM employee 3 WHERE salary >= 1500 4 AND (job_id = 671 OR job_id = 670)

Seleccionando Renglones

Sintaxis del SELECT


SELECT FROM ... ...

WHERE

...

ORDER BY ...

La clusula ORDER BY puede ordenar:


- Ascendente - Descendente - Por mltiples columnas - Por la posicin de columnas

Seleccionando Renglones

Despliegue el salario, puesto y nombre del empleado, para el departamento 10 en orden ascendente de salario. SQL> SELECT salary, last_name, job_id 2 FROM employee 3 WHERE department_id = 10 4 ORDER BY salary; Despliegue el salario, puesto y nombre del empleado, para el departamento 10 en orden descendente de salario. SQL> SELECT salary, last_name, job_id 2 FROM employee 3 WHERE department_id = 10 4 ORDER BY salary DESC;

Seleccionando Renglones

Despliegue el nombre del empleado, puesto y salario , para aquellos empleados en el departamento 30. Ordene los resultados por puesto. Si hay mas de un empleado con el mismo puesto, ordnelos por salario en orden descendente y finalmente por su apellido. SQL> SELECT first_name, job_id, salary 2 FROM employee 3 WHERE department_id = 30 4 ORDER BY job_id, salary DESC, last_name;

Seleccionando Renglones

Despliegue el nombre del empleado, salario y puesto , para el departamento 10 en orden ascendente de salario SQL> SELECT first_name, salary, job_id 2 3 4 FROM employee WHERE department_id = 10 ORDER BY 2;

Visualizando el Diccionario de Datos

El diccionario de datos es un grupo de tablas y vistas que contiene informacin sobre las tablas, privilegios de acceso a usuarios y caractersticas de la base de datos Tablas del diccionario de datos mas frecuentemente usadas:
- USER_CATALOG: Tablas, vistas, sinnimos y secuencias pertenecientes al usuario

- USER_CONSTRAINTS: Informacin sobre las restricciones en las tablas del usuario


- USER_INDEXES: Descripcin de los ndices del usuario.

Visualizando el Diccionario de Datos


- USER_SEQUENCES: Descripcin de las secuencias del usuario - USER_SYNONYMS: Descripcin de los sinnimos del usuario - USER_TABLES: Descripcin de las tablas del usuario - USER_USERS: Informacin sobre el usuario actual - USER_VIEWS: Descripcin de las vistas pertenecientes al usuario

- ALL_TABLES: Descripcin de todas las tablas accesibles al usuario

Nomenclatura para la Creacin de Tablas y Vistas

Creacin de tablas
El nombre de una tabla debe seguir las reglas estndar de nomenclatura de Oracle
- Nombre de la tabla - Nombre de la columna - Tipo de dato de la columna

Reglas de nomenclatura
- Debe de ser un nombre con una longitud de 1 a 30 carcter alfabeto
- Solamente debe contener los caracteres A-Z, a-z, 0-9, _ (subrayado) - No debe ser una palabra reservada de Oracle

Nomenclatura para la Creacin de Tablas y Vistas


- No debe ser igual al nombre de otro objeto dentro del mismo usuario de ORACLE

Nota:
- Los nombres de tablas son lo mismo ya sea en maysculas o minsculas ( por ejem: EMP = eMP)

Tipos de Datos

CHAR(n)
- Especifica una cadena de caracteres de longitud fija, el tamao mximo es de 255 bytes y el default es de 1 byte.

VARCHAR2(n)
- Especifica un cadena de caracteres de longitud variable, la cual tiene un tamao de longitud mxima en bytes. El tamao mximo es de 2000.

NUMBER(n,d)
- Valores numricos consistentes de los dgitos 0-9, con signo (+,-), opcional y un punto decimal.

Tipo de datos
La precisin n, puede tener un rango de 1 a 38 y la escala d puede tener un rango de -84 a 127, donde n es el numero mximo de dgitos y d es el numero mximo de decimales.

LONG
- Cadena de caracteres de longitud variable que puede contener hasta 2GB.

DATE
- Valores tipo fecha y hora, desde Enero 1, 4712 A.C. A Diciembre 31, 4712 D.C.

Tipos de datos

RAW(n)
- Datos en binario, cuyo tamao es en bytes. El tamao mximo es de 255 bytes y este debe ser especificado para la columna de tipo RAW.

LONG RAW
- Datos en binario de longitud variable de tamao hasta de 2 gigabytes.

Constraints

PRIMARY KEY
- Identifica de forma nica a cada rengln de la tabla

CHECK
- Especifica una condicin que cada rengln en la tabla puede satisfacer

FOREING KEY
- Designa una columna o combinacin de columnas como la llave fornea

REFERENCES
- Establece y obliga una relacin entre esta columna y la columna de la llave primaria de la tabla referenciada

Constraints

[NOT] NULL
- Especifica que esta columna no debe de tener un valor nulo - Especifica una o varias columnas cuyos valores deben ser nicos a travs de todos los renglones. Oracle crea un ndice nico para asegurar este constraint

ON DELETE CASCADE
- Especifica que Oracle mantendr la integridad automticamente removiendo los valores de la llave fornea dependiente si se remueven los valores de la llave primaria o nica

Creacin de Tablas

Sintaxis
CREATE TABLE [ usuario].tabla ({columna1 tipo_de_dato [DEFAULT expr] [constraint_de_columna]}

[ , {columna1 tipo_de_dato [DEFAULT expr]] [constraint_de_columna]}]...);

Ejemplo
- Cree la tabla de empleados

Creacin de Tablas
CREATE TABLE empleados (No_Empleado NUMBER(4) CONSTRAINT pk_emp PRIMARY KEY, Nombre VARCHAR2(10) CONSTRAINT nn_nombre NOT NULL CONSTRAINT upper_nombre CHECK (nombre=UPPER(nombre) ), Trabajo VARCHAR2(9), Gerente NUMBER(4) CONSTRAINT fk_gerente REFERENCES Empleados(No_Empleado), Fecha_Contratacion DATE DEFAULT SYSDATE, Salario NUMBER(10,2) CONSTRAINT dc-salario CHECK (salario>500), Comision NUMBER(9,2) DEFAULT 0, No_Departamento NUMBER(2) CONSTRAINT nn_No_dept NOT NULL CONSTRAINT fk_No_dept REFERENCES dept(deptno));

Creacin de Tablas

La clusula AS en el estatuto CREATE TABLE, permite crear una nueva tabla, usando los atributos de columna y datos dentro de una tabla existente. Sintaxis
CREATE TABLE tabla AS sentencia select;

Ejemplo
CREATE TABLE hdates AS SELECT employee_id, last_name, hire_date FROM employee WHERE department_id = 10;

Modificacin de Tablas

La sentencia ALTER TABLE se utiliza para alterar la definicin de una tabla:


- Aadiendo columnas o restricciones - Modificando definiciones de columnas (tipos de datos,no nulos, etc.)

Sintaxis ADD
ALTER TABLE tabla ADD ({columna1 tipo_de_dato [DEFAULT expr] [constraint_de_columna]} [ , {columna1 tipo_de_dato [DEFAULT expr]] [constraint_de_columna]}]...);

Modificacin de Tablas

Ejemplo
Aada una tabla a la tabla HDATES para almacenar el nmero de gerente

ALTER TABLE hdates


ADD (manager NUMBER(4));

Sintaxis MODIFY
ALTER TABLE tabla MODIFY ({columna1 tipo_de_dato [DEFAULT expr] [constraint_de_columna]} [ , {columna1 tipo_de_dato [DEFAULT expr]] [constraint_de_columna]}]...);

Modificacin de tablas

Ejemplo
- Modifique la tabla hdates para que almacene 18 caracteres en el nombre

ALTER TABLE hdates MODIFY (last_name CHAR(18));

Sintaxis-Borrar (DROP) un constraint


ALTER TABLE tabla DROP { PRIMARY KEY | UNIQUE (columna [, columna]...] | CONSTRAINT constraint} [CASCADE ];

Modificacin de Tablas

Ejemplo:
Elimine la clave primaria de la tabla dept ALTER TABLE department DROP PRIMARY KEY CASCADE; La opcin CASCADE borra las llaves forneas que hagan referencia a la llave primaria

Modificacin de Tablas

Modificacin de Tablas
- Para remover una columna de una tabla use la sentencia: DROP COLUMN

Sintaxis:
ALTER TABLE nombre_tabla DROP COLUMN nombre_columna Ejemplo: ALTER TABLE hdates DROP COLUMN manager;

Definicin de vistas

Una vista es una representacin lgica de una o mas tablas. Una vista no contiene datos. Todos los datos son derivados de la(s) tabla(s) subyacentes.
Ventajas de las vistas
- Seguridad - Conveniencia

Creacin de Vistas

La creacin de vistas es semejante a la creacin de tablas empleando la clusula AS SELECT Sintaxis


CREATE VIEW [ OR REPLACE ] vista [(alias, [alias] ...)] AS sentencia_select;

Ejemplo
Cree una vista que contenga el nmero, nombre y puesto para todos los empleados en el departamento 10 CREATE VIEW empvu10 AS SELECT employee_id, last_name, job_id FROM employee WHERE department_id=10;

Creacin de vistas

Sintaxis , borrar una vista


DROP VIEW vista;

Ejemplo
- Elimine la vista empvu10 DROP VIEW empvu10;

Vista con alias para columnas

Ejemplo
Cree una vista que contenga el nmero de empleado, (con el encabezado ID_NUMBER), nombre (con el encabezado EMPLOYEE) y puesto (con el encabezado TITLE) para el departamento 10 CREATE VIEW empvu10 (id_number, employee, title) AS SELECT employee_id, last_name, job_id FROM employee WHERE department_id=10;

Vista con alias para columnas

Ejemplo
Cree una vista que contenga el numero de empleado, nombre y el clculo del salario anual para del departamento 10. Nombre a la columna calculada ANNUAL_SALARY. CREATE VIEW salvu10 AS SELECT employee_id, last_name, salary * 12 ANNUAL_SALARY FROM employee WHERE department_id = 10;

Creacin de vistas con WITH CHECK OPTION

La opcin WITH CHECK OPTION asegura que los INSERTs y UPDATE`s ejecutados a travs de las vistas no afecten a los datos a los que la vista no ha permitido seleccionar.
Sintaxis
CREATE VIEW vista [ (alias, [alias]...) ] AS sentencia WITH CHECK OPTION [CONSTRAINT constraint]];

Creacin de vistas con WITH CHECK OPTION

Ejemplo
Cree una vista que contenga todas las columnas de la tabla employee para el departamento 20 con WITH CHECK OPTION CREATE VIEW empvu20 AS SELECT * FROM employee

WHERE department_id=20
WITH CHECK OPTION;

Acceso a tablas y vistas

El privilegio de DBA le permite a un desarrollador tener muchos privilegios requeridos para usar los objetos de base de datos Privilegios del Sistema
- DBA Todos los privilegios
SELECT CREATE DROP GRANT/REVOKE Ejecutar exports e imports de la base de datos completa Modificar la estructura de la base de datos RESOURCE CONNECT

Otorgar privilegios a tablas y vistas

Los dueos de tablas controlan el acceso a los objetos dentro de su rango de pertenencia.
Privilegio de Acceso a Tablas
- Crear uno mismo una tabla - Obtener privilegios del dueo de la tabla

Como el DBA o dueo de tabla, el comando GRANT y sus opciones se utilizan para proporcionar diversos niveles de acceso a los objetos de la base de datos.

Otorgar privilegios a tablas y vistas

Sintaxis
GRANT privilegio, privilegio ... [o ALL] ON tabla/vista TO usuario1, usuario2... [o PUBLIC] [WITH GRANT OPTION];

Ejemplo:
Conceder todos los privilegios a todos los usuarios sobre la tabla emp
GRANT ALL ON employee TO PUBLIC;

Otorgar privilegios a tablas y vistas

Ejemplo:
Otorgue privilegio de SELECT a curso1 para la tabla department

GRANT SELECT ON department TO curso1;

Otorgar privilegios a tablas y vistas

Ejemplo:
Otorgue privilegios de SELECT a curso1 para la tabla department permitiendo a curso1 otorgar los mismos privilegios a otros GRANT SELECT ON dept TO jones WITH GRANT OPTION;

Sinnimos

Los sinnimos pueden ser creados por razones de seguridad y conveniencia.


Niveles de sinnimos
- Pblicos - Privados

Ventajas de emplear sinnimos


- Referencia a Tablas/Vistas sin especificar al dueo (o base de datos) - Flexibilidad para adaptarse a una convencin de nomenclatura mas significativa

Creacin de Sinnimos

Sintaxis - Sinnimo pblico o privado


CREATE [PUBLIC] SYNONYM sinnimo FOR tabla;

Ejemplo
Cree el sinnimo DATES para la tabla HDATES de Ward CREATE SYNONYM dates FOR hdates;

Eliminar privilegios: REVOKE

Privilegios del sistema


- Solamente pueden ser eliminados por el DBA

Privilegios sobre objetos


- Pueden eliminarse en cualquier momento

Los privilegios de objeto se eliminan de la siguiente manera:


REVOKE INSERT ON employee FROM curso1;

ndices

Los ndices son estructuras opcionales asociadas a tablas empleadas para agilizar la ejecucin de consultas o garantizar la existencia nica de un rengln especfico El servidor Oracle acceda datos en dos formas mutuamente exclusivas
- FULL TABLESCAN (secuencial) - INDEX (selectiva)

Reglas para crear ndices

La regla general para indexar es: crear un ndice si se anticipa que habr recuperacin frecuente de menos del 10 - 15% de los renglones en una tabla grande y adems las columnas son frecuentemente referenciadas por una clusula WHERE Caractersticas de las columnas para indexacin:
- La columna es usada frecuentemente en clusulas WHERE - Cada valor es nico
- Amplio rango de valores - Muchos nulos/relativamente pocos valores

Creacin de ndices

Sintaxis - ndice sencillo


CREATE INDEX indice ON tabla (columna [, columna]...)

Ejemplo:

Cree un ndice sobre la columna employee_id de la tabla employee CREATE INDEX i_emp_ename ON employee(employee_id);

Creacin de ndices

ndice usado
SQL>SELECT * 2 3 FROM employee WHERE last_name = SMITH;

ndice no usado
SQL> SELECT *
2 FROM employee;

Eliminando ndices

El comando DROP sirve para remover ndices de la base de datos. Sintaxis :


DROP INDEX nombre_indice;

Ejemplo :
Borre el ndice i_emp_ename; DROP INDEX i_emp_ename;

Tabla de Diccionario de datos

Ejemplo:
Despliegue los ndices existentes sobre la tabla employee SQL> SELECT index_name 2 3 FROM user_indexes WHERE table_name = EMPLOYEE;

Creacin de Indices

Los ndices nicos sirven para asegurar que no existan dos renglones con valores idnticos en las columnas indexadas
Sintaxis :
CREATE UNIQUE INDEX nombre_indice ON TABLA { columna [, columna]...};

Ejemplo :
Cree un ndice sobre la columna employee_id de la tabla employee para mejorar el performance y la existencia de valores nicos para los nmeros de empleados CREATE UNIQUE INDEX i_emp_emp_id

ON employee(employee_id);

Creacin de Indices

Un mximo de 16 columnas pueden ser incluidas en un solo ndice Ejemplo


Cree un ndice para las columnas employee_id y last_name CREATE INDEX i_emp_id_last_name ON employee (employee_id, last_name);

Creacin de Secuencias

Se crean secuencias para generar nmeros enteros nicos para mltiples usuarios. Los nmeros de secuencia pueden ser usados para generar llaves primarias automticamente Sintaxis abreviada :
CREATE SEQUENCE secuencia

[INCREMEMENT BY (1|n) ]
[START WITH n] [ (MAXVALUE n | NOMAXVALUE) ] [ (MINVALUE n | NOMINVALUE )] ...;

Creacin de Secuencias

Ejemplos :
Cree una secuencia para employee_id empezando con el numero 8000

CREATE SEQUENCE s_emp_empno


START WITH 8000; Cree una secuencia para department_id empezando con el numero 100 con incrementos de 10 en 10 CREATE SEQUENCE s_dep_deptno START WITH 100 INCREMENT BY 10;

Creacin de Secuencias

Ejemplo :
Despliegue el siguiente numero de secuencia disponible para la secuencia s_emp_empno SQL> SELECT s_emp_empno.nextval 2 FROM dual;

Eliminar una secuencia de la base de datos


DROP SEQUENCE s_dept_deptno;

Ejercicios
1. Crear un ndice llamado I_EMP_EMPNO sobre la tabla employee que no permita nmeros duplicados de empleado

2. Crear la secuencia S_DEPT_DEPTNO empezando con 60 e incrementando de 5 en 5


3. Despliegue la secuencia seleccionando todas las columnas en la tabla del diccionario de datos USER_SEQUENCES 4. Use la tabla DUAL para desplegar el siguiente numero disponible de la secuencia S_DEPT_DEPTNO

Insertando Renglones

Con la sentencia INSERT se inserta un rengln a una tabla

Sintaxis :
INSERT INTO tabla [ (columna1, columna2 ...)] VALUES (valor1, valor2 ...);

Ejemplo
Despliegue la estructura de la tabla DEPT DESC[RIBE] department;

Insertando Renglones
Inserte el departamento de Finanzas, departamento 50 en Los Angeles , a la tabla department; SQL> INSERT INTO dept

VALUES (50, FINANCE, LOS ANGELES);

Ejemplo :
Inserte valores a todas las columnas de la tabla employee para un nuevo empleado

SQL> INSERT INTO employee


2 3 VALUES (1234, EMMETT, SALESMAN, 7698, SYSDATE, 2000, NULL, 30);

Insertando Renglones

Ejemplo :
Inserte un subconjunto de datos de un nuevo empleado a la tabla employee INSERT INTO employee (employee_id, last_name, hire_date, salary, department_id) VALUES (S_EMP_EMPNO.NEXTVAL, LERNER,

01-JAN-92, 2000, 30);

Insertando Renglones

Ejemplos:
Inserte valores a columnas usando parmetros INSERT INTO department VALUES (&deptno, &dname, &loc);

Insertando renglones de otra tabla

Se puede utilizar el comando INSERT con un query para seleccionar renglones de una tabla e insertarlos en otra

El query sustituye a la clusula VALUES


Ejemplo:
SQL> INSERT INTO old_emp (id, name, department)
2 3 4 SELECT employee_id, last_name, department_id FROM employee WHERE department_id IN (10, 20, 30, 40);

Actualizando Renglones

Se pueden cambiar los datos en una tabla especfica con la sentencia UPDATE Sintaxis :
UPDATE tabla SET columna1=valor, columna2=valor ... [WHERE condicion]

Ejemplo :
Despliegue la estructura de la tabla employee DESC[RIBE] employee

Actualizando Renglones

Ejemplo - Actualice mltiples columnas

Cambie al empleado numero 7566 al puesto de ventas del departamento 30

SQL> UPDATE employee 2 SET job_id = 670, department_id=30 3 WHERE employee_id = 7566;
Transferir al empleado 7788 a ventas y darle un aumento salarial del 5% SQL> UPDATE employee 1 SET job_id=670, salary = salary*1.05 2 , department_id =30 3 WHERE employee_id = 7788;

Actualizando Renglones

Ejemplo - Actualice mltiples renglones

A todos los empleados que tienen el job Sales Person cambiarles la comisin UPDATE employee SET commission = 500 WHERE job = 670;

Borrado de Renglones

La sentencia DELETE borra renglones de una tabla especfica Sintaxis :


DELETE tabla [WHERE condicion];

Ejemplo :

Borre al empleado 1234 de la tabla employee para reflejar su despido

DELETE employee WHERE employee_id = 1234;

Proceso de Transacciones

Una transaccin es definida como todos los cambios realizados a la base de datos entre operaciones de COMMIT sucesivas Inserciones , borrados, y actualizaciones a las tablas no se hacen permanentes hasta que el trabajo es guardado en la base de datos (COMMIT) Hasta que la transaccin se guarda en la base de datos, el nico que puede ver los cambios es el usuario que los hizo Un COMMIT puede ser explcito o implcito

Proceso de Transacciones

COMMIT explcito

Borre el usuario LERNER y explcitamente de COMMIT a la transaccin de la base de datos

SQL> DELETE employee 2 WHERE last_name = LERNER; SQL> COMMIT;

COMMIT implcito

- Los siguientes comandos de SQL causan un commit implcito: ALTER, COMMENT, CONNECT, CREATE, DISCONNECT, DROP, EXIT GRANT, REVOKE y RENAME

Proceso de Transacciones

COMMIT automtico

- Los cambios tienen efecto inmediatamente despus de un INSERT, UPDATE o DELETE si la opcin AUTOCOMMIT se encuentra habilitado (slo en SQL*Plus) - Para esto se utiliza el comando SET de SQL*Plus SET AUTOCOMMIT ON

Proceso de Transacciones

Controlando cuando tienen efecto los cambios: ROLLBACK El comando ROLLBACK cancela todos los cambios pendientes regresando al estado en que estaba la informacin antes del ltimo COMMIT Ejemplo :
Transferir a Jones al grupo de ventas
UPDATE employee SET job_id =670, department_id=30 WHERE first_name = JONES;

Proceso de Transacciones
Todos los empleados con el nombre JONES son transferidos al grupo de ventas. Haga rollback a la transaccion y repita la transaccion especificando el numero de empleado de Jones ROLLBACK; UPDATE employee SET job_id = 670, department_id =30 WHERE employee_id = 7566;

Proceso de Transacciones

SAVEPOINT marca un punto dentro de una transaccin particular en el cual se desea hacer un ROLLBACK parcial de la transaccin Ejemplo :

Inserte un nuevo departamento a la tabla DEPT y cree un savepoint para la transaccin

INSERT INTO department VALUES (70, PERSONAL, 124); SAVEPOINT A;

Proceso de Transacciones

Use la sentencia ROLLBACK TO para hacer una anulacin parcial de la transaccin

Ejemplo

Inserte un nuevo departamento a la tabla deparment INSERT INTO department VALUES (80, EDUCATION, 124); Anule todas las transacciones hasta el SAVEPOINT A; ROLLBACK TO A;

Ejercicios
1. 2. 3.

4. 5.

Inserte sus datos como un nuevo empleado en la tabla employee; De COMMIT al INSERT; Inserte otro rengln de la tabla employee, solicitando el nmero de empleado, el nmero de departamento, fecha de contratacin y nombre del empleado Cree un savepoint llamado SP1 Aada un nuevo departamento a la tabla department, nmero 99, ubicacin en Maui y nombre Education

Ejercicios
1. 2. 3. 4. 5. 6.

Haga rollback a savepoint SP1 Escriba una consulta para desplegar todos los datos de la tabla department De commit a los cambios Actualice sus datos de empleado, dndose un aumento mensual de $1000 Dse de baja de la tabla employee Confirme los cambios

Valores y funciones numricas

Los clculos se llevan a cabo usando las expresiones aritmticas


+ Suma - Resta * Multiplicacin / Divisin () Cambio de precedencia

Los operadores aritmticos pueden ser usados en la mayora de las sentencias SQL El resultado de los clculos se puede desplegar como si fuesen columnas con expresiones aritmticas en estatutos SELECT

Referencia a valores y funciones numricas

Ejemplo

Despliegue el salario, comisin y compensacin total para todos los vendedores cuya comisin sea mayor al 25% de su salario

SELECT last_name, salary, commission , salary + commission FROM employee WHERE job_id = 670 AND commissiom > 0.25 * salary ORDER BY 4;

Valores y funciones numricas

Una columna de un rengln sin valor contiene un valor nulo (NULL) Cuando una funcin o expresin individual se refiere a una columna que contiene un valor nulo, el resultado es un nulo Ejemplo

Despliegue el nombre del empleado puesto, salario, comisin y compensacin total para los empleados del departamento 30

SELECT last_name, job_id, salary , commission, salary + commission FROM employee WHERE department_id = 30;

Valores y funciones numricas

Con la funcin de valor nulo NVL, se convierte un valor nulo a uno no-nulo con el propsito de evaluar una expresin Cuando NVL evala la primer expresin, si es NOT NULL, regresa expr1, de otra forma regresa expr2 Sintaxis :
NVL(expr1, expr2) SELECT last_name, job_id, salary, commission , NVL(salary, 0) + NVL(commission,0) FROM employee WHERE department_id = 30;

Valores y funciones numricas


Funciones numricas comunes: MOD(a,b)

SQRT(n)
-

El residuo de a dividido entre b

ROUND(n,d)

- La raiz cuadrada de n Redondea n a d dgitos despus del decimal

TRUNC(n,d)
POWER(a,n)

- Trunca n a d dgitos despus del decimal - Eleva a a la n potencia

Valores y funciones numricas

Ejemplo -Funcin ROUND

Lista el nombre, salario mensual, salario diario (basado en 22 das de trabajo al mes) y salario diario redondeado al entero mas prximo para Allen y Jones

SELECT last_name, salary, salary/22, ROUND(salary/22,0) FROM employee WHERE first_name IN (ALLEN, JONES);

Repita la consulta pero con el salario diario truncado al entero mas prximo para Allen y Jones.
SELECT last_name, salary, salary/22, TRUNC(salary/22,0) FROM employee WHERE first_name IN (ALLEN, JONES);

Valores y funciones de fecha

Use las operaciones aritmticas bsicas en las sentencias SQL para ejecutar clculos sobre valores de fechas en la base de datos

Ejemplo

Fecha + Numero Aade un nmero de das a la fecha , regresando una fecha Fecha - Numero Resta un nmero de das a la fecha, regresando una fecha Fecha - Fecha Resta una fecha de otra, regresando un nmero de das

SELECT last_name, hire_date, hire_date + 90 REVIEW, SYSDATE-hire_date dias_transcurridos FROM employee WHERE department_id = 10;

Valores y funciones de fecha

ADD_MONTHS (date,n) LAST_DAY(date)

- Regresa una fecha n meses despus de date de contratacin

NEXT_DAY(date, day)

- Regresa el ultimo da del mes de date


- Regresa la fecha del primer dia day, despues de date

MONTHS_BETWEEN(date1, date2) SYSDATE


- Regresa la fecha actual

- Regresa el numero de meses entre date1 y date2

Valores y funciones de fecha


La funcin de conversin TO_CHAR da formato al desplegado de valores de fecha Ejemplo TO_CHAR

- Despliegue las columnas de contratacin para todos los empleados en el departamento 20 con formato DD of Month YYYY. SELECT TO_CHAR(hire_date,fmDD de Month YYYY) Date of Hire FROM employee WHERE department_id= 20;

Referencia a valores y funciones de caracteres

Combine columnas y constantes de caracteres en un formato que sea mas significativo en su lectura Ejemplo - Concatenacin

- Despliegue los nombres de los departamentos combinados con sus ubicaciones bajo el encabezado Departamentos. SELECT description || - ||location_id DEPARTAMENTOS FROM department;

Valores y funciones de caracteres

INITCAP(cadena)

UPPER(cadena)
LOWER(cadena)

- Regresa la primer letra de cadena en mayscula y el resto en minsculas - Regresa todos los caracteres de cadena en maysculas - Regresa todos los caracteres de cadena en minsculas - Regresa el numero de caracteres de cadena

LENGTH(cadena)

Valores y funciones de caracteres


La funcione de conversin TO_CHAR tambin da formato a valores numricos Ejemplo


- Despliegue la comisin de cada empleado usando signos de pesos al principio, comas y 2 decimales

SELECT last_name|| ||first_name Employe, TO_CHAR(commission,$9,990.99) Commision FROM employee;

Valores y funciones de caracteres

La funcin de conversin TO_DATE da formato a valores de tipo fecha Ejemplo

- Inserte un nuevo empleado a la tabla EMP, convierta la cadena de fecha a un formato de fecha oracle INSERT INTO employee (employee_id, last_name, hire_date , department_id) VALUES (7999, SAMS, TO_DATE(03-JUL-1991,DD-MONTH-YYYY), 10);

Otras Funciones

GREATEST(val1,val2) LEAST (val1,val2)

- Regresa el valor mayor entre val1 y val2

- Regresa el valor menor entre val1 y val2

Ejercicios
1. 2.

3.

4.

Despliegue el nombre de los empleados utilizando la letra inicial mayscula Calcule el nmero de meses entre la fecha de contratacin y la de hoy Ordene el resultado anterior por el numero de meses de empleo. Redondee el numero de meses al numero entero mayor mas prximo Despliegue el nombre del empleado, compensacin total y fecha de contratacin para todos los empleados cuyo salario sea mayor a 2 veces su comisin, de formato a la fecha de contratacin para que parezca a 10 de Diciembre de 1982

Funciones de Grupo

Las funciones de grupo obtienen resultados basados en grupos de renglones en vez de un resultado por rengln AVG(sal)
COUNT(*) MAX(sal) MIN(sal)
- Valor promedio de salario
- Numero de renglones no nulos en un grupo

- Maximo valor de salario


- Minimo valor de salario - Suma de los valores de comision

SUM(comm)

Funciones de grupo

Ejemplo

- Despliegue el promedio , el mas alto, y la suma de los salarios para todos los vendedores SELECT AVG(sal), MAX(sal), SUM(sal) FROM employee WHERE job_id = 670; - Despliegue el numero de renglones en la tabla EMP, y el numero de empleados con comisin no nula SELECT COUNT(*) EMPLOYEES , COUNT (commission) COMMISION FROM employee;

Funciones de grupo

Ejemplo - GROUP BY

Si se seleccionan al mismo tiempo una funcion de grupo y una columna normal se producira un mensaje de error
SELECT department_id, COUNT(*) FROM employee;

- Despliegue cada departamento y su numero de personal agrupado por departamento SELECT department_id, COUNT(*) FROM employee GROUP BY department_id;

Funciones de Grupo

Ejemplo

- Despliegue el numero de empleados para cada puesto dentro de cada departamento SELECT department_id, job_id, COUNT(*) FROM employee GROUP BY department_id, job_id;

Funciones de Grupo

Para poner una condicin usando una funcin de grupo se utiliza la clusula HAVING Ejemplo

- Despliegue el salario anual promedio para todos los puestos con mas de 2 empleados
SELECT job_id, AVG(salary * 12) FROM employee GROUP BY job_id HAVING count(*)>2

Comandos de SQL*Plus

ECHO {ON|OFF}

- ON Los comandos ejecutados desde una archivo seran desplegados en terminal - OFF Suprime el desplegado de los comandos Despliega el numero de registros recuperados en una consulta, ON u OFF hacen que se despliegue o no el resultado

FEED[BACK]

Comandos de SQL*Plus

SPACE {1|n}
-

PAGESIZE {14|n}

Ajusta el numero de espacio entre columnas

SET HEADING {ON|OFF}

- Ajusta el numero de lneas por pagina


- ON Se despliegan los encabezados de las columnas - OFF Se suprimen los encabezados - Fija el numero de caracteres que SQL*Plus despliega por linea, el default es 80

SET LINESIZE {n}

Comandos de SQL*Plus

SAVE nomre_archivo{.sql}
-

START nomre_archivo{.sql}
@ nomre_archivo{.sql}
- Ejecuta un archivo script.

Crea una archivo script para despus ejecutarse. Por default guarda lo que este en el buffer.

EDIT nomre_archivo.sql

- Ejecuta un archivo script, igual que START - Ejecuta un archivo, si no se le pasa nombre de archivo edita el archivo buffer.

Creacin de un archivo de reporte


El comando SPOOL crea un archivo de impresin de el reporte Ejemplo


SPOOL salreport SELECT department_id, INITCAP(last_name), salary, commission, NVL(salary,0) + NVL(commission, 0) Tot FROM employee ORDER BY department_id, last_name; SPOOL OFF

Consultas avanzadas

Un JOIN es la forma del comando SELECT que combina informacin de 2 o mas tablas

- Un JOIN simple o equijoin recupera renglones de 2 o mas tablas unidas en base a una condicin de igualdad en la clusula WHERE

Sintaxis

SELECT [tabla.]columna, [tabla.]columna ... FROM tabla1, tabla2 WHERE [tabla1.columna]=[tabla2.columna];

Consultas avanzadas

Ejemplo

- Despliegue el nombre del empleado, ubicacin y numero de departamento

SELECT employee.last_name, department.location_id ,employee.department_id FROM employee, department WHERE employee.department_id=department.department_id

Consultas avanzadas

Las condiciones de JOIN se especifican junto con las condiciones del WHERE Ejemplo
SELECT employee.ename, department_id.loc FROM employee, department WHERE employee.department_id= department.department_id AND employee.last_name ='WARD'

- Despliegue el nombre y ubicacin del empleado WARD

Consultas avanzadas

Un OUTER JOIN combina dos o ms tablas para recuperar informacin que no tienen relacin directa con la otra tabla Sintaxis
SELECT FROM WHERE - SELECT FROM WHERE

tabla.columna, tabla.columna... tabla1, tabla2 tabla1.columna=tabla2.columna(+); tabla.columna, tabla.columna... tabla1, tabla2 tabla1.columna(+)=tabla2.columna;

Consultas Avanzadas

Ejemplo

- Despliegue los nombres, numero de departamento y ubicaciones de oficina de todos los empleados, incluya en esa lista los nmeros de departamentos y ubicaciones de oficina que actualmente no tienen empleados SELECT employee.last_name ,department.department_id ,department.location_id FROM employee, department WHERE employee.department_id(+) = department.deparment_id

Consultas Avanzadas

Un SELF JOIN hace un join a una tabla con ella misma, como si se tratara de dos tablas separadas, usada en relaciones recursivas. Ejemplo
- Despliegue la asociacin del nombre del empleado y gerente como <nombre_empleado> trabaja para <nombre_gerente> SELECT worker.last_name || ' trabaja para || manager.last_name FROM employee worker, employee manager WHERE worker.manager_id = manager.employee_id

Consultas Avanzadas

Un non-equijoin recupera renglones de de 2 o mas tablas basndose en una relacin diferente a la condicin de igualdad en la clusula WHERE Ejemplo
- Despliegue el nombre del empleado y salario para aquellos en el grado nivel 3 - * SELECT emp.last_name , emp.salary FROM employee emp , salary_grade sal WHERE sal.grade_id = 3 AND emp.sal BETWEEN sal.lower_bound AND sal.upper_bound

Subconsultas

Las subconsultas seleccionan renglones de otra tabla con una condicin que depende de valores de otra consulta Las subconsultas suelen aparecer en la clusula WHERE de los siguientes estatutos
SELECT INSERT UPDATE DELETE

Subconsultas

Sintaxis del select

SELECT ... FROM ... WHERE ...( SELECT ... FROM ... WHERE ...); - Las subconsultas pueden tener varios niveles - La subconsulta puede acceder tablas que no son utilizadas por la consulta principal - Una subconsulta no puede tener una clusula ORDER BY

Subconsultas

Ejemplo - Subconsulta de rengln nico

- Despliegue el nombre y puesto de todos los empleados con el mismo departamento que Jones SELECT last_name, job_id FROM employee WHERE department_id = (SELECT department_id FROM employee WHERE UPPER(last_name) = JONES);

Subconsultas

Ejemplo - Subconsulta multirenglon

- Despliegue nombre y fecha de contratacin de todos cuyo salario sea mayor que el salario promedio, y que trabaje en el departamento donde labore cualquier empleado llamado Smith SELECT last_name, hire_date FROM employee WHERE salary > (SELECT AVG(salary) FROM employee) AND department_id IN (SELECT department_id FROM employee WHERE last_name=SMITH);

Ejercicios
1.

Muestre los nombres de los empleados, nombre y clave del departamento donde trabaja cada empleado. La salida debe ser con los siguientes encabezados:
Empleado ----------

2.

Muestre el nombre y apellido de los empleados, el nombre del departamento y el nombre del estado al que pertenecen, muestre solo a los empleados donde el nombre del estado inicie con la letra N o C. La salida debe ser: Empleado Departamento Estado --------- -------------------

Departamento Cod. del Depto ------------ --------------

Ejercicios
1. 2.

3. 4.

Muestre los nombres de los estados existentes y cuantos departamentos tiene cada estado Muestre los nombres de los estados existentes y cuantos empleados trabajan en ese estado. Muestre slo los estados que tengan mas de 5 empleados Muestre la clave de los clientes y el importe total de sus ordenes correspondientes Muestre el apellido, puesto y sueldo de todos los empleados que ganen menos del sueldo promedio

Diagrama E-R de Usuario Curso


Employee
Employee_Id

Department
Department_Id

Job
Job_Id

Location
Location_Id

Products Salary_Grade
Salary_Id Product_Id

Customers
Customer_Id

Price Sales_Order
Order_Id

Items
Item_Id

Product_Id Start_Date

PL/SQL

Temas del Curso


PL/SQL Bloque PL/SQL Conjunto de carateres de un bloque PL/SQL Conjunto de carateres relacionados Nomenclatura de variables Tipos de variables Variables escalares Variables compuestas Atributo %TYPE Atributo %ROWTYPE Componentes de PL/SQL SELECT en un bloque PL/SQL Insertando datos

Temas del Curso


Actualizando datos Borrando datos Cursores Manejando excepciones Subprogramas Procedimientos Modos de parmetro Funciones Paquetes Triggers

PL/SQL

Es un lenguaje procedural Es una extensin de SQL

Ventajas
-

- Se pueden tener sentencias de consultas o DML Operadores aritmticos Operadores relacionales Declaracin de variables Manejo de errores Portabilidad

Bloque PL/SQL
DECLARE (opcional) declaracin de variables; declaracin de cursores; creacin de tipos de dato; BEGIN (obligatoria) sentencias SQL; asignacin de valores; EXCEPTION (opcional) manejo de errores; END; (obligatoria)

estructuras de control;

Conjunto de caracteres de un Bloque PL/SQL

Caracteres permitidos

- Todas las letras maysculas y minsculas - Los dgitos de 0-9 - Los smbolos ( ) + - * / <> = ! ; : . @ % , # $ ^ & _ | {} ?[]

Operadores Aritmticos
+ * ** / Suma Multiplicacin Exponenciacin Sustraccin Divisin

Conjunto de caracteres de un Bloque PL/SQL

Operadores Relacinales
<> ^= > != < = Distinto de Distinto de Mayor que Distinto de Menor que Igual

Conjunto de caracteres relacionales

Diversos smbolos
() ; . := || -Fin de orden

Separador de lista

Elemento separador Encierra una cadena de caracteres Asignacin Concatenacin Delimitador de comentario

/* */ Delimitadores de comentario

Nomenclatura de Variables

Reglas para nombrar variables

- Las variables deben comenzar por una letra A-Z - Pueden ir seguidas de una o mas letras, nmeros del 09 o de los caracteres especiales $,# o _ - Las variables no deben ser mas largas de 30 caracteres - En los nombres de variables no se pueden incluir espacios 23_letras prueba_nombre prueba-nombre Prueba nombre un_nombre_de_variable_demasiado_largo muchos_$$$$$$ 23

Ejemplos

Nomenclatura de Variables

No esta permitido utilizar palabras reservadas como nombres de variable Algunas palabras reservadas son:
LOOP CREATE SELECT INSERT FOR DECLARE ....

Tipos de Variables

Variables PL/SQL:
- Escalar
No tienen componentes internos Mantienen un solo valor Tienen componentes internos Son reutilizables TABLE RECORD

- Compuestas

- Referencia
Cursor

Variables no declaradas dentro de PL/SQL.

- LOB (objetos grandes)

Variables Escalares

Tipos de Datos:
-

Sintaxis:

VARCHAR2(long) NUMBER [(digitos,decimales)] DATE CHAR LONG LONG_ROW BINARY_INTEGER BOOLEAN PLS_INTEGER

nombre_variable [CONSTANT] tipo_dato [NOT NULL] [:=|DEFAULT valor] vd_Fecha_Entrada DATE; vn_Salario NUMBER(5,2) := 1500; vc_Nombre VARCHAR2(15) DEFAULT JONES;

Ejemplo:

Variables Compuestas

TABLE

- Tipo de dato tabla PL/SQL, similar la tabla de Oracle - Crece dinmicamente - Consta de dos columnas, una para el ndice y otra para almacenar el valor - Sintaxis: TYPE nombre_tipo IS TABLE OF tipo_dato [NOT NULL] INDEX BY BINARY_INTEGER - Ejemplo
TYPE t_employee_salario IS TABLE OF NUMBER(5,2) INDEX BY BINARY_INTEGER vtn_salario T_EMPLOYE_SALARIO; ... vtn_salario(1).salario := 1500; vtn_salario(2).salario := 2300;
index 1 2 ... salario 1500 2300 ...

Variables Compuestas

RECORD

- Tipo de dato registro PL/SQL, similar a un registro de una tabla Oracle - Debe contener mas de un componente (llamados campos) de tipo de dato escalar, TABLE o RECORD - Sintaxis: TYPE tipo_registro IS RECORD (campo1 tipo_dato [NOT NULL {:= | DEFAULT exp}], campo2 ...) - Ejemplo:
TYPE reg_department IS RECORD (depto_id NUMBER(2), name VARCHAR2(15), location_id NUMBER(3)) vreg_department REG_DEPARTMENT; ... vreg_department.depto_id := 10; vreg_department.name := SISTEMAS; vreg_department.location_id := 123;

10

SISTEMAS

123

Atributo %TYPE

%TYPE

- Define a una variable con respecto a: - Se utiliza como posfijo

El tipo de dato de otra variable previamente declarada Una columna de la base de datos

- Sintaxis: nombre_variable variable%TYPE; nombre_variable tabla.columna%TYPE; - Ejemplo: vc_nombre VARCHAR2(10); vc_apellido vc_nombre%TYPE; vn_sueldo employee.sueldo%TYPE;

Atributo %ROWTYPE

%ROWTYPE

- Define una variable con respecto a la definicin de un rengln de una tabla - Se utiliza como sufijo - Los campos del registro toman el nombre y tipo de dato de las columnas de la tabla. - Slo almacena un registro a la vez. - Sintaxis: nombre_variable tabla%ROWTYPE; - Ejemplo: vreg_location location%ROWTYPE; ... vreg_location.location_id := 1; vreg_location.regional_group := SAN DIEGO;
1 SAN DIEGO

Componentes de PL/SQL

Estructuras de control

- Tres tipos de estructuras lgicas IF - Tres tipos de estructuras de ciclo

Estructura Lgica IF
IF THEN IF var1 > 10 THEN var2 := var2 + 20; END IF; IF var1 > 10 THEN IF var2 > var1 THEN var2 := var1 + 20; END IF; END IF;

Componentes de PL/SQL
IF THEN ELSE IF var1 > 10 THEN var2 := var1 + 20; ELSE var2 := var1 * var1; END IF; IF var1 > 10 THEN var2 := var1 + 20; ELSE IF var2 BETWEEN 7 AND 8 THEN var2 := var2 * var1; ELSE var2 := var1 * var1; END IF; END IF;

Componentes de PL/SQL
IF THEN ELSIF IF var1 > 10 THEN var2 := var1 + 20; ELSIF var2 BETWEEN 7 AND 8 THEN var2 := var2 * var1; ELSE var2 := var1 * var1; END IF;

Componentes de PL/SQL

Ciclo
LOOP-EXIT-END LOOP
cnt := 1; LOOP cnt:=cnt +1; IF cnt > 100 THEN EXIT; END IF; ... -- Cdigo END LOOP;

Componentes de PL/SQL
LOOP-EXIT WHEN-END LOOP cnt := 1; LOOP EXIT WHEN cnt > 100 ... -- Cdigo cnt := cnt + 1; END LOOP;

Componentes de PL/SQL
WHILE-LOOP-END LOOP cnt := 1; WHILE cnt <= 100 LOOP ... -- Cdigo cnt:=cnt +1; END LOOP;

Componentes de PL/SQL
FOR-IN-[REVERSE]-LOOP-END LOOP FOR cnt in 1.. 100 LOOP ... -- Cdigo END LOOP;

Estructura NULL
IF cnt>100 THEN NULL; END IF;

Select en Bloque PL/SQL

Clusula INTO es requerida El query debe regresar uno y slo un registro


DECLARE v_deptno department.department_id%TYPE; v_loc department.location_id%TYPE; BEGIN SELECT department_id, locaction_id INTO v_deptno, v_lo FROM department WHERE name = SALES; END;

Select en Bloque PL/SQL

Ejemplo
SET SERVEROUTPUT ON
DECLARE v_orderdate sales_order.order_date%TYPE; v_shipdate sales_order.ship_date%TYPE; BEGIN SELECT order_date, ship_date INTO v_orderdate, v_shipdate FROM sales_order WHERE order_id=516; dbms_output.put_line(Order Date: || v_orderdate); dbms_output.put_line(Ship Date: || v_shipdate); END;

Insertando datos

Ejemplo
DECLARE v_empno employee.employee_id%TYPE; BEGIN SELECT s_emp_empno.NEXTVAL INTO v_empno FROM dual; INSERT INTO employee(employee_id, last_name ,first_name, job_id ,department_id) VALUES (v_empno, HARDING, ROSS, 667,10); END;

Actualizando datos

Ejemplo
DECLARE v_sal_increase employee.salary%TYPE := 2000; BEGIN UPDATE employee SET salary = salary +v_sal_increase WHERE job_id = (SELECT job_id FROM job WHERE function = ANALYST); END;

Borrando datos

Ejemplo
DECLARE v_deptno employee.department_id%TYPE := 10; BEGIN DELETE employee WHERE department_id = v_deptno; END;

Cursores

Un cursor es un rea de trabajo privada SQL Hay 2 tipos de cursores Oracle Server utiliza cursores implcitos para analizar y ejecutar las sentencias SQL Los cursores explcitos los crea el programados
- Implcitos - Explcitos

Atributos del Cursor SQL

Los atributos del cursor SQL son (cursor implcito):

SQL%ROWC OUNT SQL%FOUN D SQL%NOTF OUND SQL%ISOP EN

Nmero de registros afectados la sentencia SQL mas reciente Regresa TRUE si la sentencia SQL mas reciente afecto a uno o ms registros Regresa TRUE si la sentencia SQL mas reciente afecto a uno o ms registros Siempre es FALSE porque PL/SQL cierra automticamente el cursor SQL despus de que fue ejecutado

Control de Transacciones

En PL/SQL se inicia una transaccin con el primero comando DML ejecutado Se utilizan los comandos COMMIT y ROLLBACK para terminar la transaccin explcitamente. Ejemplo:
BEGIN DELETE employee WHERE job_id = 668; dbms_output.put_line (sql%rowcount|| registros borrados); ROLLBACK; END;

Cursores explcitos

Nos permiten recuperar varios renglones de una consulta Son creados por el programador Usualmente se controlan mediante un ciclo Procesan cada uno de los registros recuperados por el query

Cursores Explcitos
no E M si PT Y? Crear un ciclo para saber si hay ms registros

DECLARE

OPEN

FETCH

CLOSE

Crear el rea de trabajo

Subir los registros al espacio en memoria

Pasar el registro actual de memoria a variables

Liberar el espacio en memoria

Declarando un Cursor

Sintaxis
DECLARE CURSOR nombre_cursor IS setencia_select; BEGIN ... END;

- No debemos utilizar la clusula INTO dentro del SELECT - Se pueden usar todas las opciones de la sentencia SELECT (ORDER BY, GROUP BY, funciones de grupo, etc)

Declarando un Cursor

Ejemplos
DECLARE CURSOR cur_employee IS SELECT employee_id, first_name|| ||last_name name FROM employee; CURSOR cur_department IS SELECT * FROM department WHERE department_id = 10; BEGIN ... END;

Abriendo el cursor

Sintaxis
DECLARE ... BEGIN OPEN nombre_cursor; ... END;

- Si la consulta no tiene datos, no se produce una excepcin


OPEN cur_employee; OPEN cur_department;

Recuperando datos del cursor

Sintaxis

FETCH nombre_cursor INTO [variable1, variable2, | nombre_registro]; - Regresa los valores del registro actual del cursor en las variables de salida - Debemos incluir el mismo numero de columnas en el FETCH que en el SELECT - Debe haber correspondencia entre la posicin de las columnas y los tipos de datos de las variables. - Probar si el cursor tiene renglones recuperados

Recuperando datos del cursor

Ejemplos
DECLARE CURSOR cur_employee IS SELECT employee_id, first_name|| ||last_name name FROM employee; v_empno employee.employee_id%TYPE; v_name VARCHAR2(50); BEGIN OPEN cur_employee; LOOP FETCH cur_employee INTO v_empno, v_name EXIT WHEN cur_employee%NOTFOUND; dbms_output.put_line(v_empno|| || v_name); END LOOP; END;

Cerrando el cursor

Sintaxis

CLOSE nombre_cursor;

DECLARE ... BEGIN OPEN cur_employee; LOOP FETCH cur_employee INTO v_empno, v_name EXIT WHEN cur_employee%NOTFOUND; dbms_output.put_line(v_empno|| || v_name); END LOOP; CLOSE cur_employee; END;

Atributos de cursores explcitos

%ISOPEN - Boolean

- Evala TRUE si el cursor esta abierto

%NOTFOUND - Boolean

- Evala TRUE si el FETCH mas reciente no regresa un rengln

%FOUND - Boolean

- Evala TRUE si el FETCH mas reciente regresa un rengln

%ROWCOUNT - Number

- Regresa el numero de filas que se han regresado al momento

Cursores y Registros

Variables tipo registro que almacene todo el registro del cursor Se puede utilizar el atributo %ROWTYPE Se puede crear un tipo de dato RECORD y declara la variable con respecto al tipo de dato Ejemplo:
DECLARE CURSOR cur_job IS SELECT * FROM job; reg_job cur_job%ROWTYPE; BEGIN OPEN cur_job FECTH cur_job INTO reg_job ...

JOB_ID

FUNCTIO N

Cursor FOR LOOP

Sintaxis

FOR nombre_registro IN nombre_cursor LOOP sentencias; ... END LOOP; - Las tareas de OPEN, FETCH y CLOSE estn implcitas dentro del cursor - No se declaran variables de tipo registro, ya que se declaran implcitamente

Cursor FOR Loops

Ejemplo
DECLARE CURSOR cur_employee IS SELECT employee_id, salary FROM employee; BEGIN FOR reg_employee IN cur_employee LOOP -- open y fetch implcitos IF reg_employee.employee_id =7839 THEN ... END LOOP; END;

Cursor FOR Loops usando subqueries


No se necesita declarar el cursor Ejemplo:


BEGIN FOR reg_employee IN (SELECT last_name, job_id FROM employee) LOOP -- open y fetch implcitos IF reg_employee.job_id =670 then ... END LOOP; END;

Manejando Excepciones

Es un identificador del PL/SQL que se levanta durante la ejecucin de un bloque Cmo se levanta? Cmo se maneja?
- Cuando ocurre un error Oracle - Cuando se levanta explcitamente

- Se puede atrapar mediante el manejador de excepciones - Se puede propagar al ambiente que llam al bloque

Tipos de Excepciones

Predefinidas por Oracle

No predefinidas por Oracle

- Errores frecuentes - Existe una constante para hacer referencia a ellas - Errores no tan frecuentes - Se debe crear una variable o constante para asignarle el nmero de excepcin - Se levantan explcitamente

Definidas por el usuario

Manejando Excepciones

Sintaxis
EXCEPTION WHEN excepcin [OR excepcin...] THEN sentencias; WHEN excepcin [OR excepcin ...] THEN sentencias; WHEN others THEN sentencias; END;

La palabra EXCEPTION inicia el manejo de excepciones Se procesa slo una excepcin por bloque

Excepciones Predefinidas

Ejemplos:
NO_DATA_FOUND TOO_MANY_ROWS INVALID_CURSOR ZERO_DIVIDE DUP_VAL_ON_INDEX

EXCEPTION WHEN no_data_found THEN sentencias; WHEN dup_val_on_index THEN sentencias; ...

Excepciones No-Predefinidas

Ejemplo:
DECLARE e_dep_con_fk EXCEPTION; PRAGMA EXCEPTION_INIT(e_dep_con_fk, -2292); BEGIN DELETE department WHERE department_id = 10; EXCEPTION WHEN e_dep_con_fk THEN dbms_output.put_line(El departamento tiene empleados); END;

Excepciones Definidas por el Usuario

Ejemplo:
DECLARE e_invalid_department EXCEPTION; BEGIN UPDATE department SET name = Information Technology WHERE department_id = 99; IF sql%notfound THEN RAISE e_invalid_department; ELSE commit; END IF; EXCEPTION WHEN e_invalid_department THEN dbms_output.put_line(El departamente no existe); END;

Propagando Excepciones
DECLARE v_employee_id employee.employee_id%TYPE; BEGIN sentencias; BEGIN SELECT employee_id INTO v_employee_id FROM employee; END; EXCEPTION WHEN too_many_rows THEN dbms_output.put_line(El query regres mas de un registro); END;

SubProgramas

Es un bloque PL/SQL que se almacena en la base de datos con un nombre Existen dos tipo Se pueden agrupar paquetes (PACKAGES)
- Procedimientos (PROCEDURE) - Funciones (FUNCTION)

Procedimientos

SubPrograma que realizan acciones Se almacena en la base de datos Sintaxis:


[CREATE] [OR REPLACE] PROCEDURE nombre_proc [nombre_param [modo] tipo_dato ,nombre_param[modo] tipo_dato ...] {IS|AS} declaracin variables; BEGIN sentencias; EXCEPTION manejar excepciones; END [nombre_proc];

Modos de Parmetros
IN

Modo default El valor lo recibe el subPrograma Igual a una constante dentro del subPrograma Puede tener de inicio un valor default

Se debe especificar El valor se regresa al ambiente Igual a llam una que lo variable no inicializada dentro del subPrograma No puede tener valor default

OUT

Se debe Puede llegar especificar al subPrograma con valor y Igual a una dentro variable cambiarlo inicializada dentro del subPrograma No puede tener valir default

IN OUT

Llamando un Procedimiento

Ejemplo:

Llamando a un Procedimiento:
SQL*Plus exec[ute] elimina_employee; Bloque PL/SQL BEGIN elimina_employee; END;

CREATE OR REPLACE PROCEDURE elimina_employee (p_employee_id IN employee.employee_id) IS BEGIN DELETE employee WHERE employee_id = p_employee_id; END;

SubProgramas Anidados
CREATE OR REPLACE elimina_employee (p_employee_id NUMBER) IS PROCEDURE inserta_bitacora IS BEGIN INSERT INTO bitacora VALUES (sysdate, p_employee_id, user); END inserta_bitacora; BEGIN DELETE employee WHERE employee_id = p_employee_id; inserta_bitacora; END;

Pase de Parmetros

Existen dos formas de pasar parmetros a un subPrograma Ejemplo:


- Notacin posicional - Notacin nominal

CREATE OR REPLACE PROCEDURE inserta_dep (p_id NUMBER, p_nombre VARCHAR2, p_location NUMBER) ... END inserta_dep; Notacin posicional SQL> execute inserta_dep(1, SISTEMAS, 124) Notacin nominal SQL> execute inserta_dep(p_nombre =>SISTEMAS, 2 p_location => 123, p_id => 1)

Funciones

Es un bloque PL/SQL que siempre regresa un valor Es llamada como parte de una expresin Sintaxis:

[CREATE] [OR REPLACE] FUNCTION nombre_funcion [nombre_param [modo] tipo_dato ,nombre_param[modo] tipo_dato ...] RETURN tipo_dato {IS | AS} declaracin variables; BEGIN sentencias; EXCEPTION manejar excepciones; END [nombre_func];

Creando una Funcin


CREATE OR REPLACE FUNCTION suelto_total (p_employee_id employee.employee_id%TYPE) RETURN NUMBER IS v_salario employee.employee_id%TYPE; BEGIN SELECT salary + nvl(commission, 0) INTO v_salario FROM employee WHERE employee_id = p_employee_id; RETURN v_salario; END sueldo_total;

Llamado una Funcin

Se invoca como parte de una expresin


SQL> SELECT sueldo_total(employee_id) 2 FROM employee

Se utiliza una variable para almacenar el valor que regresa la funcin


SQL> variable sueldo NUMBER SQL> execute sueldo := sueldo_total(7505) SQL> print sueldo DECLARE v_sueldo NUMBER(10); BEGIN v_sueldo := sueldo_total(7505); END;

Restricciones de las Funciones


Acepta slo parmetros de modo IN Cuando se manada a llamar en una expresin no puede contener sentencias DML Cuando son llamadas desde una expresin no pueden contener comandos para finalizar transacciones

Paquetes

Agrupan lgicamente variables PL/SQL, subprogramas y elementos Consta de dos partes No pueden ser llamados directamente No pueden tener parmetros, ni pueden ser anidados Se cargan completamente en memoria Ocultan informacin
- Especificacin - Cuerpo

Encapsulan lgicamente estructuras de programas relacionadas

- Componentes Pblicos - Componentes Privados

Estructura de Paquete
Package Specification

var1 NUMBER(2); PROCEDURE A;


var2 VARCHAR2(30)

Variable Pblica Procedimiento Pblico

Variable Privada
Procedimiento Privado

Package Body

PROCEDURE B; PROCEDURE A var3 ;

Procedimiento Pblico Variable Local

Sintaxis de Paquete
CREATE OR REPLACE PACKAGE nombre_paquete IS declaracin de variables; declaracin de unidades de programa; END [nombre_paquete]; CREATE OR REPLACE PACKAGE BODY nombre_paquete IS declaracin variables; creacin de unidades de programa; BEGIN cdigo una-sla-vez END [nombre paquete];

Ejemplo
CREATE OR REPLACE PACKAGE recursosh IS PROCEDURE asigna_comision (p_clave NUMBER, p_com NUMBER); FUNCTION obten_comision (p_clave NUMBER) RETURN NUMBER; END recursosh; CREATE OR REPLACE PACKAGE BODY recursosh IS FUNCTION obten_puesto(p_clave NUMBER) RETURN VARCHAR2 IS v_puesto Empleados.puesto%TYPE; BEGIN SELECT job_id INTO v_puesto FROM employee WHERE employee_id = p_clave; RETURN(v_puesto); END; FUNCTION obten_comision (p_clave Number) RETURN NUMBER IS ... END; END recursosh;

Llamando un Procedimiento

Dentro del mismo paquete:


procedimiento[(parametros, ...)]

Desde SQL*Plus
SQL> execute paquete.procedimiento[(parametros, ...)]

Desde un programa stand-alone u otro paquete


paquete. procedimiento[(parametros, ...)]

En general, para acceder desde fuera del paquete a algn componente del mismo, se debe utilizar el nombre del paquete como prefijo. Ejemplo:
SQL> execute recursosh.asigna_comision(1, 30)

Sobrecarga en Paquetes

Varios subprogramas pueden tener el mismo nombre Los parmetros formales de los subprogramas deben diferir en nmero, orden o familia de tipo de dato Los subprogramas sobrecargados se pueden colocar dentro de un paquete o como subprogramas locales Ejemplo:
CREATE OR REPLACE PACKAGE sobre_carga IS PROCEDURE inicia (fecha DATE , n INTEGER) ; PROCEDURE inicia (numero NUMER, n INTEGER) ; END;

Declaraciones FORWARD

Los identificadores deben ser declarados antes de que se pueda hacer referencia a ellos Ejemplo:
FUNCTION calcula_prod(. . .) Return Number; FUNCTION bono_anual(. . .) Return Number IS v_prod Number; BEGIN v_prod := calcula_prod(. . .); ... END; FUNCTION calcula_prod(. . .) Return Number IS BEGIN ... END;

Paquetes

Para recompilar por completo un paquete:


ALTER PACKAGE nom_paquete COMPILE PACKAGE;

Para recompilar una parte especfica del paquete:


ALTER PACKAGE nom_paquete COMPILE SPECIFICATION; ALTER PACKAGE nom_paquete COMPILE BODY;

Para eliminar por completo un paquete:


DROP PACKAGE nom_paquete;

Para eliminar slo el cuerpo del paquete:


DROP PACKAGE nom_paquete BODY;

Triggers

Es un bloque PL/SQL o un procedimiento PL/SQL asociado a una tabla, vista, esquema o base de datos Permiten establecer reglas de negocio sobre los datos Atrapan eventos, independientemente de la aplicacin que provoque el evento Se pueden utilizar para establecer una auditoria Producir datos derivados Replicar tablas

Eventos de un Triggers
Base de datos Tabla
LOGON, LOGOFF STARTUP SHUTDOWN, SERVERERROR INSERT, UPDATE, DELETE

Esquema

CREATE, ALTER, DROP

Componentes de un Triggers
1 Tiempo: BEFORE AFTER INSTEAD OF 3 Objeto: nombre de objeto DATABASE SCHEMA

Evento: 2 INSERT, DELETE, UPDATE [OF columna], CREATE, ALTER, LOGON, LOGOFF, . . .

4 Tipo: sentencia rengln


Cuerpo: 5 Procedimiento Almacenado de Java o de PL/SQL

Tipo y Tiempo de Triggers


Trigger a nivel sentencia Trigger a nivel rengln

- El cuerpo del trigger se ejecuta una sola vez - El cuerpo del trigger se ejecuta por cada rengln afectado por el vento del trigger - Slo aplica a eventos DML - Es definido por la clusula FOR EACH ROW

BEFORE: El trigger se dispara antes de que ocurra el evento AFTER: El trigger se dispara despus de que ocurre el evento INSTEAD OF: El trigger se dispara en lugar de ejecutar el evento DML para cada rengln afectado (slo para vistas)

Sintaxis Triggers

Los eventos UPDATE pueden ser limitados a columnas especificas


CREATE OR REPLACE TRIGGER nombre_trigger IS tiempo evento1 [OR evento2 OR evento3 ...] [OF columna1, columna2 ...] ON nombre_objeto [FOR EACH ROW [WHEN (condicin)]] BEGIN cdigo; END;

Pseudocolumnas :OLD y :NEW

En el cuerpo del trigger se puede hacer referencia a columnas en los renglones afectados:
- :OLD para hacer referencia antes de la actualizacin - :NEW para valores despus de una insercin o una actualizacin CREATE OR REPLACE TRIGGER actualiza_saldos AFTER UPDATE OF salary ON employee FOR EACH ROW WHEN (new.sueldo > 2000) BEGIN INSERT INTO bitacora VALUES (user, sysdate, Se actualiz el sueldo del empleado ||:old.clave|| de ||:old.salary|| a ||:new.salary); END;

Ejemplo:

INSERTING, UPDATING y DELETING


Son funciones booleanas Se utilizan para determinar el tipo de evento que dispara un trigger, cuando ste tiene especificado ms de un evento
Funcin Devuelve
FALSE en caso contrario TRUE si el evento de disparo es UPDATE; FALSE en caso contrario TRUE si el evento de disparo es DELETE; FALSE en caso contrario

INSERTING TRUE si el evento de disparo es INSERT; UPDATING DELETING

Manejo de Triggers

Para habilitar o inhabilitar un trigger individualmente:


ALTER TRIGGER nombre_trigger {DISABLE | ENABLE};

Para habilitar o inhabilitar todos los triggers de una tabla


ALTER TRIGGER nombre_tabla {DISABLE | ENABLE} ALL TRIGGERS;

Para renombrar un trigger


ALTER TRIGGER nombre_trigger RENAME TO nuevo_nom

Para eliminar un trigger se utiliza:


DROP TRIGGER nombre_trigger;

Ejercicios
1.- Insertar en una tabla histrica lo cambios que se realicen en los salarios de los empleados y sus comisiones. Esto es que cada vez que se cambie el salario o la comisin de un empleado inmediatamente despus inserte un registro en la tabla histrica (Esta deber ser creada con anterioridad). La tabla histrica se llamara sueldos_emp_'Usuario' y contendr los siguientes campos: Id_Empleado, Fecha_Cambio, Salario, Comisin y Total_Salario.
2.- Crear una vista con los siguientes datos: Id_Empleado, Nombre, Apellido, Descripcion_del_Puesto, Salario+Comision, descripcion_del_departamento y los nombres de los clientes que atienden. 3.- Elaborar una funcin que regrese como valor el id del empleado que tenga el salario mas grande de un departamento dado. 4.- Elaborar un procedimiento que otorgue un aumento del 15% a todos los empleados que tenga ms de quince aos de laborar en la empresa. 5.- Crear un trigger que nos mande un mensaje de cada vez que insertemos un nuevo empleado(de la tabla emp). El mensaje dira: 'Bienvenido : ' || Nombre_del_Empleado.

1.- Crear un Paquete llamado pkg_libreria que contendr las siguientes funciones, procedimientos y tipos de datos. * Una Funcin que regrese los das que han transcurrido desde una fecha dada hasta la fecha de hoy. * Una Funcin que regrese el la descripcin de un error generado por Oracle, donde nosotros le pasemos el numero de error que produjo Oracle. * Un Procedimiento que d de baja a un empleado dado. El procedimiento funcionar de la siguiente manera: - Si el empleado existe en la employee se eliminar y se ingresaran esos datos en una tabla donde se guardaron todo los datos de los empleados eliminados (debe crearse esa tabla previamente, se llamarar empleados_eliminados) y mandar el mensaje El empleado employee_id ha sido eliminado - Si el empleado no existe en la tabla de employee, se debe buscar ese empleado en la tabla empleados_eliminados si existe mandar el mensaje El empleado employee_id ya haba sido eliminado con anterioridad - Si el empleado no existe en la tabla employee y tampoco en la tabla empleados_eliminados mandar el mensaje El empleado employee_id no existe. * Declarar una variable del tipo numrica con longitud de 15. * Declarar una variable del tipo carcter de longitud igual a 300.

1.- Elaborar un procedimiento y ponerle por nombre obtiene_ordenes, recibir como parmetro la clave del cliente, este procedimiento obtendr Todos los pedidos realizados por el cliente, junto con los artculos que componen estos pedidos. Debe mandar los siguientes mensajes en el mismo formato. Utilice cursores: El Cliente Nombre del Cliente ha realizado los siguientes pedidos: Pedido: Numero de Pedido Artculos: Descripcion delArticulo Cantidad Costo_Total Pedido: Numero de Pedido Artculo: Descripcion delArticulo Cantidad Costo_Total

Utilice las siguientes tablas: SALES_ORDER, PRODUCT Y ITEM.

Anda mungkin juga menyukai