You are on page 1of 37

PROGRAMACION

PL/SQL
INSTRUCTOR: GEOVANNY CUDCO
¿Qué es PL/SQL?

PL/SQL (Procedural Language/Structured Query
Language) es un lenguaje de !"g!a#a$%&n %n$!us'ad" en
O!a$leD()

S""!'a '"das las $"nsul'as* +a ,ue la #an%ula$%&n de da'"s
,ue se usa es la #%s#a ,ue en SQL* %n$lu+end" nue-as
$a!a$'e!.s'%$as:
o
El #anej" de -a!%a/les)
o
Es'!u$'u!as #"dula!es)
o
Es'!u$'u!as de $"n'!"l de 0uj" + '"#a de de$%s%"nes)
o
C"n'!"l de e1$e$%"nes)
22/3/24 3

El lenguaje PL/SQL es'5 %n$"!"!ad" en:

Se!-%d"! de la /ase de da'"s)

6e!!a#%en'as de O!a$le 78"!#s* Re"!'s* )))))

En un en'"!n" de /ase de da'"s l"s !"g!a#ad"!es
ueden $"ns'!u%! /l",ues PL/SQL a!a u'%l%9a!l"s $"#"
!"$ed%#%en'"s " :un$%"nes* " /%en ueden es$!%/%! es'"s
/l",ues $"#" a!'e de s$!%'s SQL;Plus)

L"s !"g!a#as " a,ue'es de PL/SQL se ueden
al#a$ena! en la /ase de da'"s $"#" "'!" "/je'")

L"s !"g!a#as se eje$u'an en el se!-%d"! a!a a<"!!a!
!e$u!s"s a l"s $l%en'es)
22/3/24 =
Comentarios
COMENT!"OS #E L$NE
>> Es'" es un $"#en'a!%" $"n d"/le l.nea)
COMENT!"OS #E P%!!&OS
/;
$"#en'a!%" de
#as de una l.nea
;/
22/3/24 4
O'eradores
NOM(!E OPE!#O!
signaci)n *+ 7d"s un'"s %gual)
ritméticos , 7su#a)
- 7!es'a)
. 7#ul'%l%$a$%&n)
/ 7d%-%s%&n)
.. 7e1"nen'e)
!elacionales o de
com'araci)n
+ 7%gual a)
/01 3+ 7d%s'%n'" de)
/ 7#en"! ,ue)
0 7#a+"! ,ue)
0+ 7#a+"! " %gual a)
/+ 7#en"! " %gual a)
concatenaci)n 44 7d"/le /a!!a)
22/3/24 ?
Ti'os de #atos
Cada $"ns'an'e + -a!%a/le '%ene un '%" de da'" en el $ual se ese$%@$a el
:"!#a'" de al#a$ena#%en'"* !es'!%$$%"nes + !ang" de -al"!es -al%d"s)

N5M(E! 7Numérico): Al#a$ena nA#e!"s en'e!"s " de un'" 0"'an'e*
-%!'ual#en'e de $ual,u%e! l"ng%'ud* aun,ue uede se! ese$%@$ada la
!e$%s%&n 7NA#e!" de d.g%'"s) + la es$ala ,ue es la ,ue de'e!#%na el nA#e!"
de de$%#ales)
Eje#l":
sueldo num6er (7189:
Ind%$a ,ue uede al#a$ena! un -al"! nu#B!%$" de C "s%$%"nes* 3 de ellas
de$%#ales) Es de$%!* 4 en'e!"s + d"s de$%#ales)
22/3/24 C
Ti'os de #atos
C;! 7Caracter): Al#a$ena da'"s de '%" $a!a$'e! $"n una l"ng%'ud
#51%#a de =3DCD + $u+" -al"! de l"ng%'ud "! de:aul' es 2)
EEEMPLO:
se1" C6ARF
<!C;!8 7Caracter de longitud variable): Al#a$ena da'"s de '%"
$a!a$'e! e#leand" s&l" la $an'%dad ne$esa!%a aAn $uand" la l"ng%'ud
#51%#a sea #a+"!)
EEEMPLO:
N"#/!e -a!$<a!373G)F
22/3/24 D
Ti'os de #atos

(OOLEN (l)gico9* Se e#lea a!a al#a$ena! -al"!es TRUE
" 8ALSE)
Eje#l": e!!"! (OOLEANF

#TE (&ec=a9* Al#a$ena da'"s de '%" :e$<a) Las :e$<as se
al#a$enan %n'e!na#en'e $"#" da'"s nu#B!%$"s* "! l" ,ue es
"s%/le !eal%9a! "e!a$%"nes a!%'#B'%$as $"n ellas)

T!"(5TOS #E T"PO> Un a'!%/u'" de '%" PL/SQL es usad"
a!a "/'ene! %n:"!#a$%&n de un "/je'" de la /ase de da'"s)

El atributo %TYPE e!#%'e $"n"$e! el '%" de una -a!%a/le*
$"ns'an'e " $a#" de la /ase de da'"s)

El atributo %ROWTYPE e!#%'e "/'ene! l"s '%"s de '"d"s l"s
$a#"s de una 'a/la de la /ase de da'"s* de una -%s'a " de un
$u!s"!)
22/3/24 H
<aria6les
Las -a!%a/les de/en de$la!a!se den'!" de la se$$%&n
DECLARE + de/en segu%! la s%gu%en'e s%n'a1%s:
N"#/!eI-a!%a/le TIPO JNOT NULLK J:L %n%$%al%9a$%&nKF
E?em'los*
In'e!es NUM(ER7?*=)F
Des$!%$%"n VARC6AR37?G) :L M%n%$%alMF
8e$<aI#a1 DATEF
C"n'a/%l%9ad" (OOLEAN :L TRUEF
22/3/24 N

La de$la!a$%&n de una $"ns'an'e es s%#%la! a la
de$la!a$%&n de una -a!%a/le* aOad%end" la ala/!a
CONSTANT + as%gn5nd"le a $"n'%nua$%&n un -al"! a la
$"ns'an'e)

N"#/!eI$"ns'an'e JCONSTANTK TIPO JNOT NULLK J:L
%n%$%al%9a$%&nKF

Eje#l":

PI CONSTANT REAL :L =)242?NF
22/3/24 2G
Estructuras de control

"@
I8 $"nd%$%&n T6EN
(l",ue de %ns'!u$$%"nesF
JELSI8 $"nd%$%&n T6EN
(l",ue de %ns'!u$$%"nesFK
)))
JELSE
(l",ue de %ns'!u$$%"nesFK
END I8F
22/3/24 22
"& A T;EN
Se e-alAa la $"nd%$%&n + s% !esul'a Berdadera* se eje$u'an
un" " #5s l.neas de $&d%g" de !"g!a#a) En el $as" de ,ue la
$"nd%$%&n !esul'e @alsa o nula* NO se !eal%9a NINGUNA
a$$%&n)
E?em'lo*
"& @ec=aCnac 3+ DE-FE-EGHFD T;EN
Salario *+ salario .E>EI:
EN# "&:
22/3/24 23
"@ anidados
I8 :e$<aIna$ Pl'F Q2>G2>2NDGR T6EN
I8 aell%d" LQMa!'.ne9R T6EN
sala!%":L sala!%" ;2)2?F
END I8F
END I8F
22/3/24 2=
"& A T;EN A ELSE
"& @ec=aCnac 3+ JE-FE-
EGHFJ T;EN
salario*+ salario .E>EI:
ELSE
salario*+ salario. E>FI:
EN# "&:
Se e-alAa la $"nd%$%&n + s%
!esul'a Berdadera* se eje$u'an
un" " #5s l.neas de $&d%g" de
!"g!a#a)
En el $as" de ,ue la $"nd%$%&n
!esul'e @alsa* se eje$u'an las
%ns'!u$$%"nes ,ue s%guen a la
%ns'!u$$%&n ELSE)
S&l" se e!#%'e una %ns'!u$$%&n
ELSE en $ada %ns'!u$$%&n I8)
22/3/24 24
"& A T;EN A ELS"&
I8 aell%d" LMPB!e9M T6EN
sala!%":L sala!%" ;2)2GF
ELSI8 aell%d" LQMa!'.ne9R T6EN
sala!%":L sala!%" ;2)2?F
ELSI8 aell%d"LQAl-a!e9R T6EN
sala!%":L sala!%" ;2)3GF
ELSE
sala!%":L sala!%"; 2)G?F
END I8F
Se e-alAa la $"nd%$%&n + s%
!esul'a Berdadera* se
eje$u'an un" " #5s l.neas
de $&d%g" de !"g!a#a)
En el $as" de ,ue la
$"nd%$%&n !esul'e se! @alsa*
se e-alAa la $"nd%$%&n
ese$%@$ada en el ELSI8)
22/3/24 2?
CSE
La %ns'!u$$%&n CASE uede
e-alua! #Al'%les e1!es%"nes
+ de-"l-e! a!a $ada una de
ellas un -al"!//l",ue de
%ns'!u$$%"nes)
El !esul'ad" de $ada S6EN
uede se! un -al"! " una
sen'en$%a* en el !%#e! $as" el
!esul'ad" de una sen'en$%a
CASE se uede gua!da! en una
-a!%a/le)
CASE -a!%a/le
S6EN e1!es%&n2 T6EN -al"!2//l",ue de
%ns'!u$$%"nes
S6EN e1!es%&n3 T6EN -al"!3//l",ue de
%ns'!u$$%"nes
S6EN e1!es%&n= T6EN -al"!=//l",ue de
%ns'!u$$%"nes
S6EN e1!es%&n4 T6EN -al"!4//l",ue de
%ns'!u$$%"nes
ELSE -al"!?//l",ue de %ns'!u$$%"nes
END
22/3/24 2C
E?em'lo de Case
22/3/24 2D
Estructura de un 'rograma
en PL/SQL
#ECL!E
/; >> Se$$%&n de$la!a'%-a: -a!%a/les* '%"s* + su/!"g!a#as l"$ales) >> ;/
(EK"N
/; >> Se$$%&n eje$u'a/le: !"$ed%#%en'" + sen'en$%as SQL a,u.) >> ;/
/; >> Es'a es la An%$a se$$%&n del /l",ue ,ue es "/l%ga'"!%a) >> ;/
ELCEPT"ON
/; >> Se$$%&n de #anej" de e1$e$%"nes: sen'en$%as a!a el #anej" de e!!"!es a,u.)
;/
EN#:
>
run:
22/3/24 2H
E?em'lo*
SET SERVEROUTPUT ON
DECLARE
n"#/!e -a!$<a!37?G)F
(EGIN
N"#/!e:LQge"-ann+QF
d/#sI"u'u')u'Il%ne7Q6"laRTTn"#/!e)F
END
22/3/24 2N
(5CLES
En PL/SQL 'ene#"s a nues'!a d%s"s%$%&n l"s s%gu%en'es
%'e!ad"!es " /u$les:

LOOP

S6ILE

8OR
22/3/24 3G
LOOP
El /u$le LOOP1 se !e%'e 'an'as -e$es $"#" sea ne$esa!%" <as'a ,ue se :ue!9a su
sal%da $"n la %ns'!u$$%&n EL"T>
Su s%n'a1%s es la s%gu%en'e:
LOOP
-- Instrucciones
IF (expresion) THEN
-- Instrucciones
EXIT;
END IF;
END LOOP;
22/3/24 32
DECLARE
-I$"n'ad"! nu#/e!:L2F
(EGIN
l""
d/#sI"u'u')u'Il%ne7-I$"n'ad"!)F
-I$"n'ad"!:L-I$"n'ad"!U2F
e1%' V<en -I$"n'ad"!L?F
end l""F
ENDF
22/3/24 33
M;"LE
El /u$le M;"LE* se !e%'e #%en'!as ,ue se $u#la
e1!es%&n)
M;"LE 7e1!es%"n) LOOP
>> Ins'!u$$%"nes
END LOOPF
22/3/24 3=
DECLARE
M NUM(ER :L 2F
(EGIN
S6ILE M W C LOOP
D(MSIOUTPUT)PUTILINE7MM L MTTM)F
M :L M U 2F
END LOOPF
ENDF
22/3/24 34
El /u$le &O!* se !e%'e 'an'a -e$es $"#" le %nd%,ue#"s en l"s
%den'%@$ad"!es inicio + fnal.
8OR $"n'ad"! IN %n%$%"))@nal LOOP
>> Ins'!u$$%"nes

END LOOPF
22/3/24 3?
DECLARE
nu#e!" nu#/e!73):L?F
!"du$'" nu#/e!73):L2F
(EGIN
8OR % %n 2))2G LOOP
!"du$'":L nu#e!" ; %F
d/#sI"u'u')u'Il%ne7!"du$'")F
END LOOPF
ENDF
22/3/24 3C
C5!SO!ES

X'%les a!a ges'%"na! g!andes $an'%dades de da'"s)

Es'a :"!#ad" "! un $"njun'" de !eg%s'!"s de-uel'"s
"! una %ns'!u$$%&n SQL de '%" SELECT)

S"n seg#en'"s de #e#"!%a u'%l%9ad"s a!a !eal%9a!
"e!a$%"nes $"n las @las de da'"s !e$ue!ad"s)

Puede se! de d"s '%"s: IMPLICITOS + EYPLICITOS
22/3/24 3D
C5!SO! "MPL$C"TO
• Un cursor implícito es aquel que devuelve una única fila
como dato.
• La sentencia SELECT – INT es un e!emplo de cursor
implícito
• El cursor implícito de"e retornar siempre una fila o re#istro.
• Si esa condici$n no se cumple% se producir& un error
'e(cepci$n)
22/3/24 3H
E?em'lo* Cursor "m'lNcito
DECLARE
-In"#/!e -a!$<a!37?G)F
(EGIN
sele$' n"#/!es %n'" -In"#/!e
:!"# es'ud%an'e
V<e!e %dIes'ud%an'eL2F
d/#sI"u'u')u'Il%ne7Mes'ud%an'e MTT-In"#/!e)F
ENDF
22/3/24 3N
C5!SO!ES ELPL"C"TOS

Un cursor e(plícito puede devolver cero o m&s filas.

*eneralmente% un cursor e(plícito pasa por las si#uientes
etapas+

,eclaraci$n 'CURSOR)

-pertura 'OPEN)

E(tracci$n 'FETCH)

Cierre 'CLOSE)
22/3/24 =G
S"NTL"S

.ara declarar un cursor+
• Simple+
• CURSOR /nom"re0cursor1 IS /instrucci$n select1
• Con par&metros+
• CURSOR /nom"re0cursor1 'param2 tipo2% param3 tipo3% 44%
param n tipo n) IS /instrucci$n select1
22/3/24 =2
S"NTL"S

.ara a"rir un cursor+
• Simple+
• OPEN nom"re0cursor5
• Con par&metros+
• OPEN nom"re0cursor 'valor2% valor3% 4.% valor n)5
22/3/24 =3
S"NTL"S

.ara e(traer datos de un cursor+
• Con varia"les+
• FETCH nom"re0cursor INTO lista0varia"les5
• Con re#istro .L6S7L+
• FETCH nom"re0cursor INTO re#istro0.L6S7L5
22/3/24 ==
S"NTL"S

.ara cerrar un cursor+
• CLOSE nom"re0cursor5
22/3/24 =4
T!"(5TOS #E LOS
C5!SO!ES
• Con los atri"utos de los cursores se permite reconocer el estado
de un cursor
• %NOTFOUND+ ,evuelve verdadero cuando el cursor no retorna
un re#istro
• %FOUND+ ,evuelve verdadero cuando el cursor retorna un
re#istro
• %ISOPEN+ ,evuelve verdadero mientras el cursor est8 a"ierto
• %ROWCOUNT+ ,evuelve la cantidad de re#istros que se 9a
recuperado 9asta el momento
22/3/24 =?
#ECL!E
C5!SO! $es'ud%an'e "S
sele$' ; :!"# es'ud%an'eF
!egIes'ud%an'e $es'ud%an'eZ!"V'+eF
(EK"N
OPEN $es'ud%an'eF
LOOP
&ETC; cestudiante "NTO regCestudiante:
EL"T O=en cestudiantePnot@ound:
d6msCout'ut>'utCline(regCestudiante>nom6res9:
EN# LOOP:
CLOSE cestudiante:
EN#:
22/3/24 =C
P!CT"C
22/3/24 =D