Curso Oracle PLSQL 1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

Curso de SQL avanzado y


PL/SQL bsico para Oracle
11g

Manual del alumno

Profesor Hugo Or J.

pg. 1

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

1 Introduccin al curso
1.1 Objetivo de este curso
Este curso brindar al alumno el conocimiento necesario para hacer programacin en PL/SQL en una
base de datos Oracle 11g.
Primero vamos a dar una repasadita al lenguaje SQL y ver alguna sentencias avanzadas del SQL. Luego
veremos el PL/SQL.

1.2 Manual del alumno


Este manual del alumno es una ayuda para el alumno, para tenga un recuerdo del curso. Este manual
contiene un resumen de las materias que se van a estudiar durante el curso, pero el alumno debera de
tomar notas personales para completer este manual.

1.3 Requisitos para atender a este curso


Se requiere un conocimiento del lenguaje SQL.

1.5 Herramienta de desarrollo


Existen muchas herramientas de desarrollo para el PL/SQL. Lo mas bsico es un editor de texto y SQL
plus.
Las herramientas mas populares son TOAD, SQL Navigator, PL/SQL Developper, SQL Developper. SQL
Developper, desarrollado por Oracle es gratis, los dems necesitan comprar una licencia.
Cualquier herramienta se puede usar en el curso. Lo ideal es usar la con la cual tiene mas experiencia (y
licencia), o usar SQL Developper que es gratis.

Profesor Hugo Or J.

pg. 2

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

2 DML - Sentencias de manipulacin


de datos
2.1 Objetivo del captulo
Al fin de este captulo el alumno ser capaz de hacer encuestas de la base de datos. No vamos a ver todas
las opciones, ni las encuestas de otros objetos de la base de datos (vistas, funciones, secuencias,...) porque
eso sale del cuadro de este curso de iniciacin.
Existen muchas opciones (top, exists, cube,...) para cada tipo de accin, pero estas opciones dependen
de la base de datos utilizadas y/o de su versin. Solo vamos a ver las sentencias bsicas.
Existen muchos entornos que simplifican las encuestas sobre los datos

2.2 Insert

La sentencia Insert permite de insertar datos en una tabla.


INSERT INTO <nombre_de_tabla> (<campo_1>,<campo_2>,<...>) VALUES
(<valor_campo_1>,<valor_campo_2>,<valor_...>);

Tambin existe:
INSERT INTO <nombre_de_tabla> (<campo_1>,<campo_2>,<...>) <SELECT STATEMENT>;

2.3 Update
La sentencia Update permite de modificar el valor de uno o varios datos en una tabla.
UPDATE <nombre_de_tabla> SET <campo_1>=<valor_campo_1>,<campo_2>=<valor_campo_2>,<...>;

De costumbre se limita el cambio a ciertos registros, mencionados utilizando una clusula WHERE.
UPDATE <nombre_de_tabla> SET <campo_1>=<valor_campo_1>,<campo_2>=<valor_campo_2>,<...>
WHERE <clusula_where>;

2.4 Delete
La sentencia Delete permite de borrar un uno o varios registros en una tabla.
DELETE FROM <nombre_de_tabla> ;

De costumbre se limita el borrado a ciertos registros, mencionados utilizando una clusula WHERE.
DELETE FROM <nombre_de_tabla> WHERE <clusula_where>;

2.5 Commit y rollback


Si la base de datos permite la gestin de transacciones, se puede utilizar Commit para confirmar una
Insert, Update, o Delete, o `Rollback` para cancelarlos. Ciertas base de datos pueden ser configuradas
para autocommit, que hace un commit automaticamente despues de cada instruccin, a menos que se
ha iniciado una transaccin de manera explicita (con 'begin transaction xxx;).

Profesor Hugo Or J.

pg. 3

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

Hasta que el Commit est ejecutado, las modificaciones no estn inscritas de manera permanente en la
base de datos, y slo son visible para la sesin en curso del usuario autor de las acciones. Despus del
Commit, los cambios son definitivos y visible para todos.
Cuidado que ciertos objetos pueden quedar bloqueados (bloqueando otros usuarios) hasta que el commit
sea hecho.
El commit/rollback permite confirmar o de hacer un lote de transaccin, para que si una falle, todas las
anteriores se anulan tambin. Cuando se necesita una integridad de transaccin, se utiliza en
commit/rollback.
Ejemplo:
SELECT emp_no,job_grade FROM employee where emp_no=4;
UPDATE employee set job_grade=6 where emp_no=4;
SELECT emp_no,job_grade FROM employee where emp_no=4;
rollback;
SELECT emp_no,job_grade FROM employee where emp_no=4;
UPDATE employee set job_grade=6 where emp_no=4;
SELECT emp_no,job_grade FROM employee where emp_no=4;
commit;
SELECT emp_no,job_grade FROM employee where emp_no=4;

2.6 Savepoint
Un savepoint permite identificar un punto en una transaccin al cual se podr eventualmente regresar
(rollback).
SELECT emp_no,job_grade FROM employee where emp_no=4;
START TRANSACTION;
UPDATE employee set job_grade=5 where emp_no=45;
SELECT emp_no,job_grade FROM employee where emp_no=4;
savepoint vale_cinco;
SELECT emp_no,job_grade FROM employee where emp_no=4;
UPDATE employee set job_grade=4 where emp_no=45;
SELECT emp_no,job_grade FROM employee where emp_no=4;
rollback to savepoint vale_cinco;
SELECT emp_no,job_grade FROM employee where emp_no=4;
rollback;

2.7 Select
El Select permite de seleccionar datos en la base de datos, y visualizarlos.
Se puede utilizar un alias para que el campo se pueda llamar con otro nombre.
SELECT <campo_1>,<campo_2>,<...> FROM <nombre_tabla>;
SELECT <campo_1> as <alias1>,<campo_2>,<...> FROM <nombre_tabla>;

Para seleccionar todos los campos de la tabla, se utiliza el asterisco en vez de los nombres de campo.
SELECT * FROM <nombre_tabla>;
Ejemplo:
SELECT emp_no,job_grade as nivel FROM employee;
SELECT * FROM employee;

Profesor Hugo Or J.

pg. 4

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

2.8 Where
La clusula Where permite de limitar la encuesta a ciertos datos.
Se utiliza evaluando un campo versus una condicin. Se pueden utilizar varias condiciones, con el uso de
Or, And, y/o parntesis.
Para compara nmeros, se utiliza el signo '=', o '<', o'>', o'<=', o '>=', o 'between ... and ...'.
Para comparar caracteres se utiliza la palabra 'like'. El wildcard es '%'.
Para compara fecha, se utiliza el signo '=', o '<', o'>', o'<=', o '>=', o 'between ... and ...'.
Para
SELECT * FROM <nombre_tabla>
WHERE <campo_1> <operation> <condicin> AND <campo_2> <operation> <condicin>;
Ejemplo:
SELECT emp_no,job_grade FROM employee where emp_no>45;
SELECT emp_no,job_grade FROM employee where emp_no=46 or emp_no=61;
SELECT * FROM employee where emp_no between 1 and 2;
SELECT * FROM employee where last_name like 'P%';

Operadores SQL

2.8.1

Ya hemos visto anteriormente qu tipos de datos se pueden utilizar en Oracle. Y siempre que haya datos,
habr operaciones entre ellos, as que ahora se describirn qu operaciones y con qu operadores se
realizan:
Los operadores se pueden dividir en TRES conjuntos:
Aritmticos: utilizan valores numricos
Lgicos (o booleanos o de comparacin): utilizan valores booleanos o lgicos.
Concatenacin: para unir cadenas de caracteres.
Operadores artmticos Retornan un valor numrico:
Smbo lo

Significado

Ejemplo

Operacin suma

1+2

Operacin resta

1-2

Operacin
multiplicacin
Operador divisin

1*2

1/2

Operadores lgicos Retornan un valor lgico (verdadero o falso)


Smbolo

Significado

Ejemplo

Igualdad

1=2

!= <> ^=

Desigualdad

1 != 2 1 <> 2 1 ^= 2

>

Mayor que

1>2

<

Menor que

1<2

>=

Mayor o igual que

1 >= 2

<=

Menor o igual que

1 <= 2

IN (RS)

Igual a algn elemento del arreglo de resultados.

1 IN (1,2)

Profesor Hugo Or J.

pg. 5

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

ANY SOME ALL

[TRUE]
a algn elemento del arreglo de resultados (derecha).
Debe ser estar precedido por =, !=, <, <=, >, >= Hace un OR 10 >= ANY (1,2,3,10) [TRUE]
lgico entre todos los elementos.

BEETWEEN x
AND y

a todos los elementos del arreglo de resultados (derecha),


Debe ser estar precedido por =, !=, <, <=, >, >= Hace un
AND lgico entre todos los elementos.
Operando de la izquierda entre x e y. Equivalente a op >=
x
AND op <= y

EXISTS

Si la retorna al menos una fila

LIKE(*)

Es como

IS NULL

Si es nulo

IS NOT NULL Si es No nulo


NOT cond.

10 <= ALL (1,2,3,10) [TRUE]


10 BETWEEN 1 AND
100

EXISTS (SELECT 1 FROM DUAL)


'pepe' LIKE pe%
1 IS NULL
1 IS NOT NULL

Niega la condicin posterios

cond AND cond Hace un Y lgico entre dos condiciones


OR cond Hace un O lgico entre dos condiciones

NOT EXISTS NOT


BETWEEN NOT IN NOT =
1=1 AND 2 IS NULL Cond
1=1 OR 2 IS NULL

Existen los siguientes comodines:


%: Conjunto de N caracteres (de 0 a )
_: Un solo carcter
Concatenacin

Oracle puede hacer una conversin automtica cuando se utilice este operador con valores numricos: 10
|| 20 = '1020'
Este proceso de denomina CASTING y se puede aplicar en todos aquellos casos en que se utiliza valores
numricos en puesto de valores alfanumricos o incluso viceversa.
2.8.2

La ausencia de valor: NULL

Todo valor (sea del tipo que sea) puede contener el valor NULL que no es ms que la ausencia de valor. As
que cualquier columna (NUMBER, VARCHAR2, DATE) puede contener el valor NULL, con lo que se dice
que la columna est a NULL. Una operacin retorna NULL si cualquiera de los operandos es NULL. Para
comprobar si una valor es NULL se utiliza el operador IS NULL o IS NOT NULL.

2.9 Count
Para contar un numero de registros, se utiliza la palabra Count
SELECT COUNT (<campo_1>) FROM <nombre_tabla>;

Profesor Hugo Or J.

pg. 6

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

Ejemplo:
SELECT count(*) FROM employee where job_grade=4;

2.10Sum, avg, min, max


Para una suma, min, max,... de un campo, se utilizan la palabras Sum, Min, Max, Avg.
SELECT SUM(<campo_1>) FROM <nombre_tabla>;
Ejemplo:
SELECT avg(salary) FROM employee where job_grade=2;

2.11Distinct
Para tener la lista de valores distintas de un campo, se utiliza la palabra Distinct.
SELECT DISTINCT(<campo_1>) FROM <nombre_tabla>;
Ejemplo:
SELECT distinct(job_grade) FROM employee;

2.12Order by
Para ordenar los registros regresados, hay que utilizar la palabre Order by.
SELECT * FROM <nombre_tabla> ORDER
BY <campo_1>,<....>;
Ejemplo:
SELECT first_name,last_name FROM employee order by first_name,last_name;

2.13Uniones
Uniones permiten de unir los resultados de dos consultas. Para poder unirlas, tienen que tener los
mismos campos.
SELECT <campo_1>,<campo_2>,<...> FROM <nombre_tabla_1>
UNION
SELECT <campo_1>,<campo_2>,<...> FROM <nombre_tabla_2>;

Ejemplo:
select t.first_name,t.last_name from employee t where job_grade=5 union
select t2.fname,t2.lname from patient t2;

2.14Subconsultas
Subconsultas son consultas sobre otras consultas. La subconsulta se puede utilizar el la cusula From, o el la
condicin de la clsula Where. La subconsulta se pone entre parntesis. En MySQL, las subconsultas deben
tener sus propios alias.
SELECT t3.<campo_1>, t3.<campo_2> FROM (SELECT t.<campo_1>, t.<campo_2> FROM <nombre_tabla > t
<where cluase>) t3
WHERE t3.<campo_1> IN (SELECT t2.<campo_1> FROM <nombre_tabla_2> t2);
Ejemplo:
SELECT t3.first_name,t3.last_name FROM (select t.first_name,t.last_name from employee t where job_grade=5 union select
t2.fname,t2.lname from patient t2 ) t3 where t3.last_name like 'RAMIREZ%';

Profesor Hugo Or J.

pg. 7

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

SELECT t3.first_name,t3.last_name, t3.job_country FROM employee t3 where


t3.job_country IN
(select t.country from country t where t.currency='Euro');

2.15Agrupaciones
Las agrupaciones permiten agrupar datos y saber cuantos datos hay de cada valor.
SELECT <campo_1>,<campo_2>, COUNT(*) FROM <nombre_tabla>
GROUP BY <campo_1>,<campo_2>;

Las agrupaciones se pueden filtrar utilizando la clausula HAVING.


Ejemplo:
SELECT job_grade, count(*) FROM employee where
emp_no>45
group by job_grade;
SELECT job_grade, sum(salary) FROM employee
where emp_no>45 group by
job_grade
having sum(salary)<1000000;

2.16Rollup
Rollup de usa en un group by para agregar el total del sub grupo.
Ejemplo:
select dept_no,
job_code,
count(*), sum(salary)
FROM
employee
GROUP BY
rollup(dept_no,job_code);
select dept_no,
job_code,
count(*), sum(salary)
FROM
employee
GROUP BY dept_no,
rollup(job_code);

2.17Cube
Cube es parecido al rollup pero da los totales de todos los grupos posibles.
Ejemplo:

select dept_no,
job_code, count(*),
sum(salary)
FROM
employee
GROUP BY
CUBE(dept_no,job_code);

Profesor Hugo Or J.

pg. 8

Curso de SQL avanzado y PL/SQL bsico para Oracle 11g

2.18Rendimiento
Un problema comn en las encuesta a base de datos es el rendimiento. Las
causas de problema de rendimiento son numerosas.
Las ms comunes son:
Instruccin sin o con mala clausula WHERE
Falta de indice sobre un campo utilizado como filtro
Mal diseo de la base de datos
Problema de hardware (falta de memoria, disco ocupado, cpu ocupado por otra aplicacin,...)
Mala configuracin del servidor (mal uso de la memoria, disco, cpu,...)
Mala programacin en el cliente. Falta de commit, conexin no cerrada, ...
Red sobrecargada o muy lenta
Cuando se enfrenta a un problema de rendimiento hay que probar primero de identificar la causa y los
sntomas. Servidor sobrecargado en CPU, disco, memoria? Un cliente afectado o todos? Cuando aparece
el problema?
Para ayudar a investigar estos problemas existen herramientas. Algunos vienen con la base de datos,
otros estn desarrollados aparte.
2.18.1

Indices

Los indices permiten mejorar el rendimiento de las consultas, y entonces del servidor.
Un indice es un pequeo archivo que contiene los valores de uno o varios campos de manera ordenada,
junto con la informacin de la ubicacin fsica del registro.
Cuando la consulta usa el indice, primero lee el archivo del indice, y luego los datos en la tabla. Si todos
los campos pedidos estn en el indice, solo lee el indice.
Los indices se usan cuando se busca un valor exacto (= o like '...'), un rango de valores (between and
, >, <,...) , o los valores que 'inician con' (like '...%').
Si se usan funciones (upper(campo), ) no se usara el indice (a menos que existe un indice basado en
funcin).
Los indices tan poco se usan con clausula is null, is not null, in (), not , !=, like '%...',....
2.18.2

Diseo de la base de datos y denormalizacin

Si por lo general es mejor tener una base de datos normalizada (sin informacin repetida), a veces hay
que denormalizar por razn de rendimiento, es decir copiar un valor en una tabla que no le pertenece
directamente. Denormalizar tiene un costo a nivel de programacin (mantener la integridad de los
datos), pero permite mejorar (en ciertos casos) el rendimiento

Profesor Hugo Or J.

pg. 9

También podría gustarte