Curso Oracle PLSQL 1
Curso Oracle PLSQL 1
Curso Oracle PLSQL 1
Profesor Hugo Or J.
pg. 1
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.
Profesor Hugo Or J.
pg. 2
2.2 Insert
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>;
Profesor Hugo Or J.
pg. 3
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
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
Significado
Ejemplo
Igualdad
1=2
!= <> ^=
Desigualdad
1 != 2 1 <> 2 1 ^= 2
>
Mayor que
1>2
<
Menor que
1<2
>=
1 >= 2
<=
1 <= 2
IN (RS)
1 IN (1,2)
Profesor Hugo Or J.
pg. 5
[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
EXISTS
LIKE(*)
Es como
IS NULL
Si es nulo
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
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
Ejemplo:
SELECT count(*) FROM employee where job_grade=4;
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
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>;
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
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
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