Vous êtes sur la page 1sur 22

I.

INTRODUCCIN A PLSQL Web


El paquete de PLSQL Web sirve al programador de Oracle para poder desarrollar interfaces
basados en WWW (World Wide Web) que manipulen bases de datos y por lo tanto
interpretables por cualquier navegador como Interntet Eplorer! "etscape! #o$illa%%%
&e esta forma! el programador de Oracle obtiene las siguientes venta'as(
L)gica siempre del lado del servidor( el PLSQL Web se e'ecuta en el servidor *eb! en
concreto mediante un m)dulo llamado mod+plsql! lo cual quiere decir que el peso de los
procesos de verificaci)n en las transacciones corren del lado del servidor y no del cliente!
con lo que se a,orra traba'o al ordenador cliente%
Instalaci)n-.ctuali$aci)n del lado del servidor( al estar todo el c)digo del lado del
servidor! la instalaci)n-actuali$aci)n de la aplicaci)n no obliga al programador a
despla$arse a los ordenadores clientes o a dar soporte para que se descargue la aplicaci)n
as/ como el tiempo necesario de soporte parta de'arla operativa%
Independencia de la plataforma( sea cual sea el Sistema Operativo del cliente es seguro
que dispondr0 de alg1n navegador que interpretar0 el programa desarrollado por el
programador! lo cual ,ace que no sea necesario ning1n cambio traum0tico en los sistemas
de la empresa cliente para adaptarse a la aplicaci)n%
PLSQL Web se basa en la me$cla de dos lengua'es( PLSQL y 23#L! y su funcionamiento es
muy parecido al de otros lengua'es como .SP! 4SP! P2P%%%! es decir! el c)digo PLSQL Web
genera p0ginas 23#L! tambi5n llamadas *eb% Esto ,ace que sea un requerimiento que el
programador de PLSQL Web sepa mane'arse en 23#L! adem0s del necesario conocimiento
de desarrollo de aplicaciones PLSQL%
II. ARQUITECTURA PLSQL Web
Para desarrollar un sistema PLSQL Web se necesitan como m/nimo estos componentes(
6ase de datos Oracle
Servidor *eb .pac,e
#odulo PLSQL Web (mod+plsql! tambi5n llamado PLSQL 7ate*ay)
"avegador *eb
Los tres primeros son la parte servidor! es decir es la que contiene los datos y las
presentaciones *eb a las que el cliente acceder0 mediante la cuarta% Esto supone que
traba'aremos en un entorno cliente8servidor! de forma que la aplicaci)n no ser0 un ente 1nico
sino que se desglosar0 en partes para su me'or desarrollo%
Sin entrar en muc,o detalle se puede decir que antiguamente se me$claban en un mismo
programa tres partes(
La l)gica de la aplicaci)n( es decir el control de los datos (con el mayor peso de c)digo en
la aplicaci)n)%
El interfa$ de usuario( es la parte que comunica el cliente con la l)gica de la aplicaci)n%
Los datos( la parte que tiene registrada la informaci)n necesaria en nuestra aplicaci)n%
Este sistema era muy costoso en su desarrollo y mantenimiento( la dificultad de sincron/a en
sistemas de datos en red! as/ como la gran cantidad de recursos que consum/a en la m0quina
instalada! oblig) a separar estas partes% 2oy en d/a! las aplicaciones que tienen un peso
importante tanto de datos! como de l)gica e interfaces aplican en la mayor/a de los casos
estos dos esquemas(
9% En dos niveles( en este caso los datos (base de datos) y la l)gica de la aplicaci)n (PLSQL
Web) est0n en un ordenador servidor y el cliente accede mediante el interfa$ (navegador
*eb) a la aplicaci)n%
.s/! el cliente que dispone de un navegador! no accede directamente a la informaci)n! sino
que lo ,ace mediante el servidor *eb que mediante el m)dulo mod+plsql recoge los datos
del servidor Oracle! siendo el flu'o de datos bidireccional (el cliente puede enviar datos a
la base de datos pero la base de datos tambi5n env/a datos al cliente)%
Arquitectura a 2 niveles
:% . tres niveles( En esta configuraci)n los datos est0n en un ordenador servidor con la base
de datos y en otro ordenador servidor est0 el servidor *eb; por otro lado est0 el cliente que
accede a la *eb de la aplicaci)n con su navegador *eb%
Arquitectura a 3 niveles
Sin embargo si las transacciones a la base de datos no son muy altas el modelo a dos niveles
es perfectamente factible! relegando el sistema de tres niveles a necesidades cr/ticas%
6ase de &atos Oracle Servidor Web .pac,e
mod+plsql
<liente
Ordenador
Servidor
Ordenador
<liente
6ase de &atos Oracle
mod+plsql
<liente
Ordenador
Servidor
de &atos
Ordenador
<liente
Servidor Web .pac,e
Ordenador
Servidor Web
III. CONFIGURACION DEL SERVIDOR DATOS/WEB
Para poder traba'ar con PLSQL Web necesitamos que todas las partes est5n perfectamente
instaladas% . partir de la versi)n de la =i la instalaci)n es muy sencilla! pudiendo instalar el
servidor *eb en la misma instalaci)n que el servidor de datos (que deber0 ser la versi)n
Enterprise por supuesto)! quedando el primero de ambos instalado en el puerto =>! o en el
???= seg1n la versi)n de Oracle o seg1n el sistema operativo%
Pero con esto no basta! deberemos adem0s configurar convenientemente el m)dulo PLSQL
Web! para ello accederemos a las opciones de configuraci)n mediante un navegador que
acceda al ordenador servidor% Esta ser/a la p0gina inicial a la que podr/amos acceder(
Recordar que la IP y puerto pueden ser diferentes en su servidor. Tambin difiere ligeramente
la pgina de presentacin del servidor web segn la versin de Oracle.
.,ora accederemos al enlace de configuraci)n de del m)dulo PLSQL @mod plsqlA% Se nos
presentar0 la siguiente p0gina(
Seleccionaremos a,ora @Balores de los descriptores de .cceso a 6ase de datos del 7ate*aysA
mostr0ndonos la siguiente p0gina(
.qu/ vamos a seleccionar el descriptor SI#PLE&.& que es el que utili$aremos en todo este
manual% .s/ pues pulsamos en el icono de editar que nos llevar0 a la p0gina de configuraci)n(
&esde aqu/ podemos configurar todos los aspectos fundamentales del modulo PLSQL para
el descriptor SI#PLE&.&! pero nosotros nos centraremos en la configuraci)n de la
conei)n% .s/! b0sicamente! escogeremos dos maneras de configurar la conei)n
9% &e'ando vac/os los cuadros de username y pass*ord% &e esta forma para acceder a
nuestros procedimientos *eb tendremos que ,acer un login%
:% &etallando el username y el pass*ord de forma que cuando accedamos a nuestros
programas no tengamos la necesidad de ,acer login% "i que decir tiene que este
m5todo es muy inseguro y que ,ay que estar muy seguro de lo que se est0 ,aciendo!
pues de'amos v/a libre a que cualquier persona e'ecute nuestros procedimientos *eb
sin ninguna acreditaci)n%
&e cualquier forma en el cuadro de teto de <adena de conei)n tendremos que poner la IP
del servidor (o su nombre en la red si ,ay un servidor de nombres%%%) adem0s del puerto y del
SI& al que nos conectaremos)! lo ,aremos con el siguiente formato(
IP(Puerto(SI&
Por 1ltimo aplicaremos los cambios y listo% .,ora despu5s de tanta instalaci)n podemos
empe$ar a programar! recordando que para acceder a los procedimientos *eb deberemos
poner la ruta base que es (si ,abe/s seguido los pasos anteriores) algo as/(
127:0:0:1:7778/pls/simpledad/<procedimiento a ejecutar>
*Recordad que puede cambiar la Ip y el puerto.
IV. EL LENGUAJE DE PLSQL Web
<omo se ,a dic,o antes el PLSQL Web es una me$cla entre 23#L y PLSQL% En realidad! lo
que se ,ace es crear p0ginas 23#L desde el c)digo PLSQL! de manera similar a como lo
,ace .SP! P2P %%% Beamos un simple e'emplo que lo ilustre(
CREATE OR RE!ACE ROCE"#RE saludo $%
&E'$(
)T*R$(T+,)ola -undo,./
E("/
/
<omo se puede ver es un simple procedimiento de PLSQL% La 1nica particularidad que tiene
es que muestra el mensa'e de C2ola #undoC no lo muestra por consola(SQLPlus) o en un
control de de teto(&EBELOPED) si no que lo ,ace en una pagina *eb% Esto lo ,ace
mediante la llamada 23#L%PDI"3 que imprime en una p0gina *eb el par0metro que
nosotros le pasemos% Este ser/a el resultado(
23P es un paquete que se utili$a para crear las p0ginas 23#L desde PLSQL% <on 5l
podemos crear tablas! listas! formularios%%%! todo lo que nosotros queramos% El procedimiento
b0sico de este paquete es precisamente el de PDI"3 que ,emos utili$ado en el e'emplo y su
uso es precisamente el de escribir c)digo 23#L en la p0gina que se genere% Sin embargo! en
el e'emplo anterior nos ,emos aprovec,ado de la fleibilidad de 23#L% Escribi5ndolo forma
m0s correcta quedar/a(
CREATE OR RE!ACE ROCE"#RE saludo $%
&E'$(
)T*+,<)T-!><&O"0>,./
)T*+,)ola -undo,./
)T*+,</&O"0></)T-!>,./
E("/
/
Lo que ,emos cambiado en primer lugar es que a,ora utili$amos la versi)n contra/da del
procedimiento 23P%PDI"3 que es el 23P%P% Lo siguiente es que ,emos aEadido a nuestra
p0gina el inicio de 23#L y de 6O&F y tambi5n su final! respetando de esta forma las
etiquetas b0sicas que componen una p0gina 23#L% &e esta forma podemos decir que 23P%P
sirve para crear p0ginas *eb desde PLSQL%
.s/ pues podemos incrustar c)digo 23#L en aplicaciones PLSQL con 23P%P ) podemos
crear las p0ginas 23#L mediante el completo api que nos proporciona el paquete 23P%
Para que el programador de PLSQL pueda utili$ar cualquiera de ambas s/gase el siguiente
cuadro%
Etiqueta HTML Funcin del paquete http
G23#LH 23P%23#LOPE"
G-23#LH 23P%23#L<LOSE
G2E.&H 23P%2E.&OPE"
G-2E.&H 23P%2E.&<LOSE
G3I3LEH#i t/tuloG-3I3LEH 23P%3I3LE(@#i t/tuloA);
G6O&FH 23P%6O&FOPE"
G-6O&FH 23P%6O&F<LOSE
GIOD# .<3IO"JA*eb+a+llamarA
#E32O&JK7E3KH
23P%IOD#OPE" (@*eb+a+llamarA!
cmet,odJHA7E3A)
GI"PL3 3FPEJKtetK ".#EJKnombreK
#.MLE"732J9> SINEJ9>H
23I%IOD#3EM3(@nombreA!9>!9>)
GI"PL3 3FPEJKsubmitK H 23I%IOD#SL6#I3
GI"PL3 3FPEJKresetK H 23I%IOD#DESE3
G3.6LEH 23P%3.6LEOPE"
G-3.6LEH 23P%3.6LE<LOSE
G3DH 23P%3.6LEDOWOPE"
G-3DH 23P%3.6LEDOW<LOSE
G3&H#i&ato 23P%3.6LE&.3.(@#i&atoA);
G. 2DEIJKmi*eb%,tmKHEnlaceG-.H 23P%."<2OD(@mi*eb%,tmA!AEnlaceA)
GOP<omentario 23#L 8H 23P%<O##E"3(C<omentario 23#LC)
"ota( este manual ,ace uso de 23P%P para la creaci)n de todos los e'emplos as/ que si le
interesa ,acerlo mediante el api de ,ttp esta tabla se le quedar0 enseguida muy pobre (dada la
rique$a en etiquetas y atributos del lengua'e 23#L)! por eso se recomienda en caso de no
,acer uso etensivo del m5todo 23P%P tener bien cerca la referencia en l/nea de Oracle%
V. USOS FRECUENTES DE PLSQL WEB
1. Listados
Imaginemos que nos interesa tener disponible el listado de las tablas que como usuarios de la
base de datos ,emos ido creando% .dem0s! queremos tenerlo disponible v/a *eb! para poder
as/ acceder a esta informaci)n siempre! sin necesidad de tener instalado ning1n producto de
Oracle en el ordenador en el que reali$amos la consulta% Esto se podr/a ,acer de la forma
siguiente(
CREATE OR RE!ACE ROCE"#RE lista1ta2las $%
C#R%OR C1 $% %E!ECT TA&!E1(A-E 3RO- #%ER1TA&!E%/
&E'$(
)T*+,<)T-!><)EA"><T$T!E>!istado de Ta2las</T$T!E></)EA"><&O"0>,./
)T*+,<TA&!E &OR"ER42>,./
3OR RE' $( C1 !OO
E(" !OO/
)T*+,</TA&!E></&O"0></)T-!>,./
)T*+,<TR><T">,55RE'*TA&!E*(A-E55,</T"></TR>,./
E("/
/
En este e'emplo podemos ver que en un procedimiento de PLSQL ,acemos que se vayan
mostrando los nombres de las tablas que ,emos creado! gracias a uncursor tradicional de
PLSQL que nos devuelve las tablas que tenemos (LSED+3.6LES es una tabla que tienen
todos los usuarios y que contiene diversa informaci)n sobre nuestras tablas) cuya
informaci)n es volcada a trav5s de una p0gina 23#L%
.s/ pues siempre que queramos mostrar informaci)n de la base de datos lo podremos ,acer
v/a *eb! incrustando la informaci)n de un cursor en una tabla (o en una lista o en cualquier
tipo de estructura 23#L)%
Otro e'emplo! en este caso aplicado a la tabla de alquileres de videoclub (E4E#+<L3E)%
Decordando que estaba compuesta de la siguiente forma(
E6E-1C!TE+$"1E6E-+37.8 "($1C!TE+37.8 3EC)A1A!98 "$A%1A!9.
podr/amos mostrar sus datos de la siguiente forma(
CREATE OR RE!ACE ROCE"#RE lista1al:uileres $%
C#R%OR C1 $% %E!ECT ; 3RO- E6E-1C!TE OR"ER &0 3EC)A1A2/
&E'$(
)T*+,<)T-!><&O"0><#!>,./
3OR RE' $( C1 !OO
)T*+,<!$>Al:uiler con <ec=a de ,55RE'*3EC)A1A255, de la pel>cula ,55RE'*$"1E6E-55,
reali?ado por ,55RE'*"($1C!TE55, con una duraci@n de ,55RE'*"$A%1A255, d>as*,./
E(" !OO/
)T*+,</#!></&O"0></)T-!>,./
E("/
/
.,ora ,emos presentado de otra forma la informaci)n( en una lista% En cada uno de sus
items mostramos una pequeEa frase que describe la informaci)n de cada l/nea de alquileres!
pero al igual que en el caso anterior utili$ando un cursor y entreme$clando la informaci)n de
5ste con c)digo 23#L%
EJERCICIO: odi!ica el e"emplo anterior #aciendo que la in!ormaci$n se muestre en una
p%&ina de t'tulo ()I*+A,O ,E A)-.I)ERE*(/ y que en esta caso muestre la in!ormaci$n en
una tabla en ve0 de con listas. Adem%s deber1is conse&uir que en ve0 del I,2EJE sal&a
el t'tulo de la pel'cula y en ve0 del ,3I2C)+E sal&a el nombre del cliente.
2. Formularios
En 23#L! si queremos obtener entrada de datos del usuario! se utili$an controles (como
ca'as de teto! botones de opci)n! etc%%% ) incrustados en formularios% &e esta forma! la p0gina
23#L es capa$ de interactuar con el usuario en ve$ de sacar de manera continua m0s y m0s
listados de datos% &ic,o de otra manera! el formulario es la forma que el lengua'e 23#L
tiene de recoger informaci)n del cliente% &e ,ec,o! una de las utilidades t/picas de los
formularios es la de recopilar las opiniones de los visitantes de la p0gina sobre los aspectos a
me'orar de la misma%
Bamos a ver a,ora un sencillo e'emplo de un formulario creado con PLSQL Web(
CREATE OR RE!ACE ROCE"#RE <ormulario $%
&E'$(
)T*+,<)T-!><&O"0><3OR- ACT$O(4Ainsertar1datosBopinion14opinion1A>,./
)T*+,<=C>Ejemplo de 3ormulario</=C>,./
)T*+,"anos tu opini@n***<&R>,./
)T*+,<$(#T T0E4AteDtA (A-E4Aopinion1A><&R>,./
)T*+,<$(#T T0E4Asu2mitA>,./
)T*+,</3OR-></&O"0></)T-!>,./
E("/
/
QQu5 es lo que se ,ace en este bloque de c)digoR Lo primero! abrir un form en el
procedimiento cuya acci)n es llamar a otro procedimiento (insertar+datos)%
Sste se encargar/a de coger la informaci)n del control de teto (opini)n9) y gestionarla como
fuese (por e'emplo insertarla a la base de datos para poder eaminarla m0s tarde)%
Beamos a,ora como podr/a ser ese procedimiento de insertar+datos(
CREATE OR RE!ACE ROCE"#RE insertar1datos +opinion1 in c=ar. $%
&E'$(
$(%ERT $(TO datos EA!#E%+opinion1./
)T*+,ReFistro insertado correctamente***,./;
EGCET$O(
H)E( OT)ER% T)E(
)T*+,Error al insetar el reFistro***,./;
E("/
/
<omo se puede ver! el procedimiento recibe un par0metro que es el teto que vamos a
insertar en la base de datos (el que ,aya escrito el usuario en el @tetA del procedimiento
anterior)% 2ec,os con 5l! lo insertamos en la base de datos (en concreto en una tabla que
,emos llamado @datosA) informando de ello al usuario de la p0gina% .dem0s! si por alguna
ra$)n se produ'era un error nos mostrar0 un mensa'e alternativo mostrando la imposibilidad
de ,acer esta inserci)n% Estas versiones alternativas de p0ginas 23#L en tiempo de
e'ecuci)n las conseguimos gracias a gesti)n de errores de PLSQL%
*
3ota: no es aconse"able mostrar estos mensa"es sin #aber abierto las etiquetas 4+) y
5O,6 7y cerr%ndolas despu1s de mostrar el mensa"e8/ pero en este caso nos aprovec#amos
de la !le9ibilidad de 4+) para &enerar un c$di&o al&o menor/ eso s'/ aconse"ando al
pro&ramador que para proyectos importantes procure respetar todas las etiquetas necesarias
para crear una p%&ina 4+).
EJERCICIO: 4aced una p%&ina :)*-) ;eb que permita #acer las altas de los nuevos
clientes de la cadena de videoclubs.
3. Las cookies
2ay muc,as veces en las que interesa que cierta informaci)n se guarde en el ordenador
cliente% 23#L no es una ecepci)n a esta necesidad! pero su sistema de guardado esta
ciertamente limitado debido a eigencias de seguridad! son las cooTies! pequeEos arc,ivos
que nos env/an los servidores con informaci)n que interesa que este en el lado del servidor
por dos ra$ones fundamentales(
9% Quitar ciertas transacciones cliente8servidor% .l guardar informaci)n en el lado del
cliente evitaremos tener que recibir en el servidor peticiones de los clientes
solicitando las mismas% Por supuesto esta manera de traba'o no es etensible a toda la
informaci)n del cliente! s)lo a la adecuada(por e'emplo! el nombre de usuario y su
pass*ord que se pide en muc,as p0ginas! de tal forma que no necesite ,acer login
siempre que entre en la p0gina)%
:% 7uardar variables en el ordenador cliente que contengan ciertas informaciones de la
sesi)n del cliente U(por e'emplo! en una p0gina de compras online! podemos ,acer
una cooTie que guarde los productos que vamos aEadiendo al carrito de la compra)%
*:)*-) no tiene variables de sesi$n/ lo que obli&a a #acer un uso e9tensivo de las coo<ies
para cuando 1stas variables se requieran.
Beamos a continuaci)n un e'emplo de p0gina 23#L que use de las cooTies
CREATE OR RE!ACE ROCE"#RE cooIie $%
&E'$(
OHA1#T$!*mime1=eader +,teDt/=tml,8 3A!%E./
OHA1COO7$E*send +,miFalletita,8 ,pls:l es lo mas,./
OHA1#T$!*=ttp1=eader1close/
)T*+,CooIie mandada***,./
EGCET$O(
H)E( OT)ER% T)E(
)T*+,ro2lema al mandar la CooIie***,./
E("/
/
Este es un simple e'emplo que manda una cooTie al ordenador cliente% La cooTie se llama
migalletita! y lo que 5sta contiene es una cadena de caracteres (@plsql es lo m0sA)% Las dos
llamadas a OW.+L3IL ,acen que el mensa'e se env/e en la cabecera mime y que no est5 en
formato ,tml (visible para todo el mundo)% . partir de este momento! podemos utili$ar la
cooTie en toda la sesi)n en la que el usuario est5 en nuestro sitio *eb%
Pues bien! a,ora ya sabemos como se guarda la cooTie en un ordenador cliente! pero! Qc)mo
se recupera informaci)n de una cooTie ya guardadaR "ada me'or que un e'emplo(
CREATE OR RE!ACE ROCE"#RE deJuelJe1cooIie $%
micooIie OHA1COO7$E*cooIie/
&E'$(
micooIie :4 OHA1COO7$E*Fet +,miFalletita,./

$3 micooIie*num1Jals 4 0
T)E(
=tp*print+,error desconocido***,./
else
)T*+,!a cooIie contiene: ,55 micooIie*Jals+1../
end i</
E("/
/
Este procedimiento lee el contenido de la cooTie antes escrita utili$ando diferentes m5todos y
definiciones del paquete OW.+<OOVIE que como su nombre indica nos sirve para el
mane'o de 5stas% .l principio creamos una definici)n de cooTie vac/a para! ya en el 6E7W"!
recogerla con la funci)n get% &espu5s! verificamos que la cooTie contenga algo% .s/
llamamos al m5todo num+vals que nos devolver0 > en el caso de que migalletita no tenga
ning1n valor asociado! en ese caso informa de que se ,a producido alg1n error desconocido%
En caso contrario escribimos el valor 9 (vals(9)) de la cooTie! que no es otro que el de @plsql
es lo m0sA%
.s/ pues! para mandar una cooTie utili$amos el m5todo send(nombre+cooTie!Avalor de la
cooTieA)! y para si queremos devolverla lo ,acemos en una cooTie vac/a mediante el m5todo
get% Para etraer de esta cooTie el valor que nos interese utili$aremos el m5todo
vals(n1mero+de+valor8empe$ando por 98)%
Nota: Este manual no profundiza en el uso de cookies pero si hace un uso ms o menos
tpico de ellas. Para ms informacin acerca de las cookies aconsejamos un manual de
referencia avanzado (por ejemplo el: O'Reilly Oracle Web Applications Plsql Developer'S
Introduction) o la referencia en lnea de Oracle).
Ejercicio: Desarrollad un procedimiento web que pida un nombre de usuario y contrasea.
ste llamara a otro que verifique que el username y el password se correspondan con pepe y
6789 respectivamente. As, si el login es correcto se llamar a un procedimiento que
mostrar los nombres de todas nuestras tablas en la base de datos. Si el login falla deber
mostrarse un mensaje de error.
"i que decir tiene que el procedimiento que muestra las tablas debe ser lo m0s seguro
posible! es decir! que s)lo si se ,a pasado el login se debe poder e'ecutarlo! a,/ es donde
deben entrar las cooTies%
VI. Ejercicio !e PL"SQL Web
9% 2aced un listado ,tml con los clientes de la cadena mediante el uso de un cursor(
create or replace procedure lista+cites is
cursor c9 is select U from cite;
begin
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CGtableHC);
for reg in cl loop
,tp%print(CGtrHC);
,tp%print(CGtdHCXXreg%dni+clte);
,tp%print(CGtdHCXXreg%nom+clte);
,tp%print(CGtdHCXXreg%dir+clte);
,tp%print(CGtdHCXXreg%telefono);
,tp%print(CGtdHCXXreg%edad);
,tp%print(CG-trHC);
end loop;
,tp%print(CG-tableHC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
:% 2aced una aplicaci)n ,tml que pida en un form un dni mediante un control de teto y
un bot)n de submit! y 5ste llame a un procedimiento que mediante un cursor nos liste
los alquileres efectuados por el cliente%
create or replace procedure formdni is begin
,tp%print(CG,tmlHC);
,tp%print(@GbodyHC);
,tp%print(
@
Gform actionJY,ttp(--9Z:%9[=%9%9\-pls-simpledad-,ob:%alquilerdniR
dniJdniYHC);
,tp%print(CGinput typeJtet nameJdniHC);
,tp%print(CGinput typeJsubmitHC);
,tp%print(CGformHC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
create or replace procedure alquilerdni (dni c,ar) is
cursor cl is select U from e'em+cIte *,ere dni+clteJdni;
begin
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CGtable borderJ:HC);
,tp%print(CGtrHGtdHid+e'emGtdHdni+clteGtdHfec,aGtdHdiasG-trHC);
for reg in c9 loop
,tp%print(CGtrHC);
,tp%print(CGtdHCXXreg%id+e'em);
,tp%print(CGtdHCXXreg%dni+clte);
,tp%print(CGtdHCXXlreg%fec,a+a:);
,tp%print(CGtdHCXXreg%dias+a:);
,tp%print(CG-trHC);
end loop;
,tp%print(CG-tableHC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
\% 2aced un procedimiento ,tm/ que inserte un nuevo registro en la base de datos%
&ispondremos en primer lugar de un procedure que nos mostrar0 el form para dar de
alta al cliente! y un segundo procedure que recibir0 los datos del primero y informar0 si
se ,a insertado correctamente(
create or replace procedure forminsertar is
begin
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CIntroduce el nuevo cliente (dni! nombre!direccion!telefono!edad)(GbrHC);
,tp%print(CGform actionJY,ttp(--9Z:%9[=%9%9\-pls-simpledad-,ob:%insertarR
dniJdni]nomJnom]dirJdir]teletonoJtelefono]edadJedadYHC);
,tp%print(CGinput typeJtet si$eJ9> nameJdniHC);
,tp%print(CGinput typeJtet si$eJ9> nameJnomHC);
,tp%print(CGinput type8tet si$eJ9> nameJdirHC);
,tp%print(CGinput typeJtet si$eJ9> nameJtelefonoHC);
,tp%print(CGinput typeJtet si$eJ9> nameJedadHC);
,tp%print(CGbrHC);
,tp%print(CGinput typeJsubmitHC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
create or replace procedure insertar(dni c,ar!nom c,ar! dir c,ar! telefono c,ar!edad
number) is begin
insert into clte values(dni !nom!dir!telefono!edad);
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CG,:HDegistro insertado correctamenteG-,:HC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
^% 2aced una aplicaci)n que muestre los alquileres del d/a actual de la siguiente forma;
create or replace procedure alq+,oy is
cursor cl is select U from el e'em+clte *,ere fec,a+a:Jto+c,ar(sysdate);
nom clte%nom+cIte _type;
tit pel%titulo_type;
begin
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CG,\H.lquileres del CXXsysdateCXXG-,\HC);
,tp%print(CGtable borderJ 9HC);
,tp%print(CGtrHC);
,tp%print(CGtdH"ombre clienteGtdHPel/culaC);
,tp%print(CG-trHC);
for reg in c9 loop
select nom+clte into nom from clte *,ere dni+clteJreg%dni+clte;
select titulo into tit from pel *,ere id+pel in
(select id+pel from e'em *,ere id+e'emJreg%id+e'em);
,tp%print(CGtrHC);
,tp%print(CGtdHCXXnomXXCGtdHCXXtit);
,tp%print(CG-trHC);
end loop;
,tp%print(CG-tableHC);
,tp%print(CGbodyHC);
,tp%print(CG-,tmlHC);
a:Jto+c,ar(sysdate);
end;
-
`% 2aced un formulario *eb mediante pl8sql! de tal forma que al darle un apellido! nombre!
o parte de ellos! nos saque todos los nombres de personas (con sus correspondientes
datos%%%) eistentes en la base de datos% .dem0s! nos interesa que no distinga en la
consulta entre may1sculas y min1sculas%
create or replace procedure formlistanom is
begin
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CGform actionJY,ob:%listanomRparamJparamYHC);
,tp%print(CG,\H6usqueda por nombre o apellido%%%G-,\HC);
,tp%print(CGinput typeJtet si$eJ9> nameJparamHC);
,tp%print(CGinput typeJsubmitHC);
,tp%print(CG-formHC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
create or replace procedure listanom (param c,ar)is
cursor cl is select U from clte *,ere upper(nom+clte) liTe C_CXXupper(param)XX C_C;
begin
,tp%print(CG,tmlHC);
,tp%print(CGbodyHC);
,tp%print(CGtable borderJ9HC);
,tp%print(CGtrHC);
,tp%print(CGtdH&niGtdH"ombreGtdH&irecci)nGtdH3lfnoGtdHEdadC);
,tp%print(CG-trHC);
for reg in c9 loop
,tp%print(CGtrHC);
,tp%print(CGtdHCXXreg%dni+clteXXCGtdHCXXreg%nom+clteXXCGtdHCXXreg%dir+clteXXCGtdHCXX
reg%telefonoXXCGtdHCXXreg%edad);
,tp%print(CG-trHC);
end loop;
,tp%print(CG-tableHC);
,tp%print(CG-bodyHC);
,tp%print(CG-,tmlHC);
end;
-
Este manual ,a sido desarrollado por mi y no se basa en ninguna trascripci)n de
manual alguno y por supuesto sus e'ercicios son originales% Por ello me gustar/a que si
,aces uso de 5l respetes este parrafo que identifica al autor% Pido adem0s que si ,aces
uso de 5l seas tan amable de mandarme un mail para contarme brevemente lo para que
lo quieres o que te ,a parecido%
Oscar Polo Iern0nde$ :>>^%
oraclemanatelefonica%net

Vous aimerez peut-être aussi