Académique Documents
Professionnel Documents
Culture Documents
-lgunos dere!.os reser)ados /ste art0!ulo se distri"u,e "a(o la li!en!ia 1Re!ono!imiento23ompartir4gual 5 $ /spa6a7 de 3reati)e 3ommons' disponi"le en .ttp://!reati)e!ommons org/li!enses/",2sa/5 $/es/deed es /ste do!umento 8o uno mu, similar9 esta disponi"le en 8o enlazado desde9 .ttp://in:ormati!a gonzalonazareno org
Caractersticas de PL/SQL Estructura de un bloque PL/SQL Operaciones bsicas en PL/SQL Estructuras de control en PL/SQL Subprogramas: unciones ! Procedimientos Cursores E"cepciones
Es una e"tensi&n de SQL con caractersticas tpicas de los lengua'es de programaci&n( Procedural language / structured quer! language( Las sentencias SQL de consulta ! manipulaci&n de datos pueden ser incluidas en unidades procedurales de c&digo) pero no pueden usarse instrucciones **L ni *CL( Se e'ecuta en el lado del ser+idor ! los procedimientos ! ,unciones se almacenan en la -*( .o tiene instrucciones de entrada por teclado o salida por pantalla(
$nclu!e los tipos de datos ! operadores de SQL( Los programas se pueden compilar desde SQL/Plus #comando /% o usar SQL *e+eloper u otros $*Es( Los comentarios comien0an por 1 1 o se colocan entre // ! //( Trae unas librerias con ,unciones prede,inidas) se llaman paquetes( Para e'ecutar los procedimientos almacenados desde SQL/Plus se usa el comando e"ec(
BEGIN
obligatorio
E#CE!$I%N opcional
acciones a reali&ar cuando se producen errores
END'
obligatorio
DA$E' N92BER,+/ N%$ N9LL :; -.' )ARC*AR+,->/ :; ?A$LAN$A@' C%NS$AN$ N92BER :; -A..'
%tras previa4ente declaradas6 9na colu4na de la BD6 La tabla D la colu4na de la BD6 El no4bre de la variable definida con anterioridad
Desde consulta: SELEC$ sal G .6-. IN$% v(co4ision 1R%2 e4p 3*ERE e4pno ; H.I+'
*bms8output(put8line
9:todo de un paquete prede,inido de O63CLE que sir+e para que el ser+idor muestre in,ormaci&n por pantalla) se usa ,undamentalmente en la ,ase de depuraci&n de los procedimientos(
begin dbms8output(put8line #;9i <= bloque PL/SQL dise>ado por ;??user??; el dia ;??s!sdate%@ end@
3ctuali0aci&n de datos en PL/SQL Aumenta el salario de todos los empleados de la tabla emp que son analistas. DECLARE v(incre(sal e4p6salB$C!E :; +...' BEGIN 9!DA$E e4p SE$ sal ; sal N v(incre(sal 3*ERE =ob ; ?ANALCS$@' 5566 END'
Condiciones booleanas
#$u%l es el valor de v&result en cada caso' v(result :; v(variAND v(vari+'
v(result
$R9E 1ALSE N9LL 1ALSE
v(vari+
$R9E 1ALSE N9LL N9LL
Los bucles repiten una sentencia o un grupo de sentencias varias veces6 *aD > tipos de bucles:
Bucle bOsico6 L%%!6 Acciones repetitivas sin condiciones globales6 Co4o si no existiera6 Bucle 1%R6 Acciones repetitivas basOndose en un contador6 NP4ero conocido de vueltas6 Bucle 3*ILE6 BasOndose en una condiciEn6
3*ILE condiciEn L%%! instrucciones' 556 END L%%!' Se utili&a este bucle para repetir sentencias 4ientras una condiciEn sea cierta6
DECLARE v(contador binarD(integer :; .' BEGIN 3*ILE v(contador Q; -. L%%! INSER$ IN$% prueba ,id, contador/ )AL9ES ,v(id, v(contador/' v(contador :; v(contador N -' END L%%!' C%22I$' END'
O6 indice $. C6E2E6SED +alor8inicial (( +alor8,inal LOOP instrucciones@ MMMMMM(( E.* LOOP@ N Osar bucle O6 para n= ,i'o de repeticiones( N El ndice se declara implcitamente(
El Rndice fuera del bucle no estO definido, por lo tanto no se puede referenciar6 9sa una expresiEn para 0acer referencia al valor actual de un Rndice6 No 0agas uso de un Rndice co4o ob=etivo de una asignaciEn6
DECLARE valor(inicial valor(final 5555556 END L%%!' N92BER :; -' N92BER :; -..'
unciones: Se almacenan en el ** ! son in+ocadas( Pueden recibir parmetros ! de+uel+en un +alor Sen su nombreT(
Procedimientos en PL/SQL
C6E3TE O6 6EPL3CE P6OCE*O6E CesquemaD(nomproc #nombre1parmetro U$.) OOT) $. OOTV tipo de dato) ((% U$S) 3SV *eclaraci&n de +ariables@ *eclaraci&n de constantes@ *eclaraci&n de cursores@ -EQ$. Cuerpo del subprograma PL/SQL@
unciones en SQL
C6E3TE O6 6EPL3CE O.CT$O. CesquemaD(nombre1,uncion #nombre1parmetro tipo1de1dato) ((% 6ETO6. tipo1de1dato U$S) 3SV *eclaraci&n de +ariables@ *eclaraci&n de constantes@ *eclaraci&n de cursores@ -EQ$. Cuerpo del subprograma PL/SQL@
$S -EQ$. SELECT salario) ma"imo $.TO b) +ma" 6O9 empleados 7EE6E empleado8idIa@ $ b G +ma" TEE. b:IbJ<HH@ E.* $ @ EWCEPT$O. 7EE. .O8*3T38 OO.* TEE. b:I 1<@ 6ETO6.@ E.*@
*ECL36E +salario .O9-E6@ -EQ$. procedimiento< #LF<L) +salario%@ dbms8output(put8line #;El salario del empleado LF<L es ;) +salario%@ E.*@
3cti+idades
6eali0a un procedimiento mostrar_defts que reciba un nombre de usuario ! muestre el nombre de su tablespace por de,ecto( 6eali0a un procedimiento que reciba un nRmero de departamento ! muestre su nombre ! localidad( 6eali0a una ,unci&n devolver_sal que reciba un nRmero de empleado ! de+uel+a su salario( 6eali0a un procedimiento que reciba un nRmero de departamento ! muestre una lista de sus empleados( XQue problema tienesY
Cursores Tipos Los cursores son reas de memoria que almacenan datos e"trados de la base de datos( Ea! dos tipos: $mplcitos: *eclarados implcitamente para todas las sentencias del *9L ! SELECT de PL/SQL) consultas que de+uel+en una sola ,ila( E"plcitos: *eclarados ! nombrados por el programador( 9anipulados por sentencias especi,icas en las instrucciones e'ecutables del bloque( Se usan para consultas que de+uel+en ms de < ,ila(
Cursores $mplcitos
a/ SELEC$ de una sola ,ila( Si no de+uel+e ninguna ,ila o de+uel+e ms de una se origina un error( Lo controlaremos en la 0ona E#CE!$I%N) mediante los mane'adores : N%(DA$A(1%9ND 5 $%%(2ANC(R%3S6 b/ Sentencias del D2L) de ms de una ,ila(
emp(empno4T5PE@ emp(empno4T5PE@ $S
CO6SO6 emp8cursor SELECT empno) ename 6O9 emp 7EE6E deptno I LH@ (((((((((
36
Sinta"is: CL%SE nombre8cursor *esacti+a el cursor ! libera la memoria reser+ada( Cerrar cursor tras el procesamiento de las ,ilas( 2ol+er a abrir el cursor si ,uese necesario( Ea! un m"imo nRmero de cursores que pueden estar abiertos a la +e0 en la -*( .o se pueden recuperar datos del cursor una +e0 cerrado(
40
Cursores e"plcitos 3tributos 4$SOPE. 4.OT OO.* booleano booleano T6OE si est abierto T6OE si la recuperaci&n ms reciente no de+uel+e ,ila T6OE si la recuperaci&n ms reciente de+uel+e ,ila n= de ,ilas de+ueltas Basta ese momento
4 OO.*
booleano
46O7COO.T
nRmero
13/03/11
43
O6 nombre8registro $. nombre8cursor LOOP instrucci&n8<@ instrucci&n8F@ (((( E.* LOOP@ 3pertura) recuperaci&n ! cierre implcitos( La +ariable registro se declara implcitamente
*ECL36E CO6SO6 emp8cursor $S SELECT ename) sal) T6O.C##S5S*3TE \ Biredate%/LP]% as antiguedad 6O9 emp 7EE6E deptno I <H@ -EQ$. O6 +8reg8cursor $. emp8cursor LOOP *-9S8OOTPOT(POT8L$.E#+8reg8cursor(ename ??[ / Z?? +8reg8cursor(sal??[ / Z?? +8reg8cursor(antiguedad%@ E.* LOOP@ E.*@
E"cepciones en PL/SQL
S uT es una excepciEnU
$denti,icador PL/SQL que surge durante la e'ecuci&n pro+ocado por un error( Se produce un error Oracle( Es pro+ocado e"plcitamente por el programador(
SCE4o surgeU
SCo4o se gestionaU
- Tratndola con un mane'ador en el propio bloque( - Propagndola al proceso padre(
E#CE!$I%N 3*EN e"ception< C%R e"ceptionFMD $*EN instruccion<@ instruccionF@ CMMMMMMMMMMMMMMMMMM(( 3*EN %$*ERS $*EN instruccionL@ instruccion^@D
EWCEPT$O.) inicia la secci&n de gesti&n de e"cepciones( Se permiten +arios mane'adores de e"cepciones( Solo se procesa un mane'ador de e"cepciones antes de salir del bloque( 7EE. OTEE6S es la Rltima clusula
declare
asociaci&n
re,erencia
declare
raise
re,erence
s( declarati+a
s( e'ecutable
s( e"cepciones
Se especi,ica la e"cepci&n
Se gestiona la e"cepci&n
Procedimiento que permite emitir mensa'es de error de,inidos por el usuario desde subprogramas almacenados( Solo se puede llamar desde un subprograma almacenado( Se usa en la secci&n e'ecutable o en la de e"cepciones( *e+uel+e condiciones de error al usuario de ,orma consistente con otros errores del ser+idor Oracle(
MMMMMMMM( E#CE!$I%N 7EE. .O8*3T38 OO.* TEE. 63$SE83PPL$C3T$O.8E66O6 #1FHFH<) Zmanager) no es un empleo +lido)[%@ MMMMMMMM( *ELETE 6O9 emp 7EE6E mgr I +8mgr@ $ SQL4.OT OO.* TEE. 63$SE83PPL$C3T$O.8E66O6#1FHFHF) Zeste no es un 'e,e +lido[%@ E.* $ @ MM