Sei sulla pagina 1di 64

Creacin de Procedimientos Almacenados

Copyright 2004, Oracle. Todos los Derechos Reservados.

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo siguiente: Describir y crear un procedimiento Crear procedimientos con par metros Diferenciar entre par metros formales y reales !tilizar diferentes modos de transferencia de par metros "lamar a un procedimiento #anejar e$cepciones en procedimientos %liminar un procedimiento

Copyright 2004, Oracle. Todos los Derechos Reservados.

&'u( es un Procedimiento)
!n procedimiento: %s un tipo de subprograma *ue realiza una accin +e puede almacenar en la base de datos como objeto de es*uema ,omenta la capacidad de reutilizacin y mantenimiento

Copyright 2004, Oracle. Todos los Derechos Reservados.

+inta$is para Crear Procedimientos


!tilice CREATE PROCEDURE seguido del nombre, los par metros opcionales y la palabra clave IS o ASAgregue la opcin OR REPLACE para sustituir un procedimiento e$istente%scriba un blo*ue P".+'" *ue contenga variables locales, un valor BEGIN y un valor END /o END procedure_name0CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [mode] datatype1, parameter2 [mode] datatype2, ...)] IS|AS [local_variable_declarations; ] BEGIN 1lo*ue P".+'" -- actions; END [procedure_name];
Copyright 2004, Oracle. Todos los Derechos Reservados.

Desarrollo de Procedimientos

2 %ditar file.sql

3 Cargar 4 Crear /compilar y almacenar0

5 %jecutar !tilizar S O! ERRORS para errores de compilacin


Copyright 2004, Oracle. Todos los Derechos Reservados.

&'u( son los Par metros)


Par metros: +e declaran despu(s del nombre del subprograma en la cabecera P".+'" 6ransfieren o comunican datos entre el emisor de la llamada y el subprograma +e utilizan como variables locales, pero dependen del modo de transferencia de par metros:
!n par metro IN /valor por defecto0 proporciona valores para *ue un subprograma los procese !n par metro OUT devuelve un valor al emisor de la llamada !n par metro IN OUT proporciona un valor de entrada, *ue se puede devolver /salida0 como valor modificadoCopyright 2004, Oracle. Todos los Derechos Reservados.

Par metros ,ormales y 7eales


Par metros formales: 8ariables locales *ue se declaran en la lista de par metros de una especificacin de subprograma %jemplo:
CREATE PROCEDURE "#ise$s#l(i% NU&BER's#l NU&BER) IS BEGIN ... END "#ise$s#l;

Par metros reales: 8alores literales, variables o e$presiones utilizadas en la lista de par metros del subprograma llamado %jemplo:

e()$i% *+ ,--; "#ise$s#l(e()$i%' .---)


Copyright 2004, Oracle. Todos los Derechos Reservados.

#odos de Par metros de Procedimiento


"os modos de par metros se especifican en la declaracin de par metros formales, despu(s del nombre del par metro y antes del tipo de dato%l modo IN es el valor por defecto si no se especifica ning9n modoCREATE PROCEDURE procedure(param [mode] datatype) ... #odos %ntorno de llamada IN /valor por defecto0 OUT IN OUT Procedimiento
Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de Par metros IN: %jemplo

CREATE OR REPLACE PROCEDURE "#ise$s#l#"/ (i% IN e()l0/ees.e()l0/ee$i%1T2PE' )e"3e45 IN NU&BER) IS BEGIN UPDATE e()l0/ees SET s#l#"/ + s#l#"/ 6 (, 7 )e"3e458,--) ! ERE e()l0/ee$i% + i%; END "#ise$s#l#"/; 8

E9ECUTE "#ise$s#l#"/(,:;',-)

Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de Par metros OUT: %jemplo


CREATE OR REPLACE PROCEDURE q<e"/$e() (i% IN e()l0/ees.e()l0/ee$i%1T2PE' 4#(e OUT e()l0/ees.l#s5$4#(e1T2PE' s#l#"/ OUT e()l0/ees.s#l#"/1T2PE) IS BEGIN SELECT l#s5$4#(e' s#l#"/ INTO 4#(e' s#l#"/ =RO& e()l0/ees ! ERE e()l0/ee$i% + i%; END q<e"/$e(); DECLARE e()$4#(e e()l0/ees.l#s5$4#(e1T2PE; e()$s#l e()l0/ees.s#l#"/1T2PE; BEGIN q<e"/$e()(,:,' e()$4#(e' e()$s#l); ... END;
Copyright 2004, Oracle. Todos los Derechos Reservados.

8isualizacin de Par metros OUT con i+'":Plus


!tilice las variables P".+'" *ue se imprimen con llamadas al procedimiento DB&S$OUTPUT.PUT$LINESET SER?EROUTPUT ON DECLARE e()$4#(e e()l0/ees.l#s5$4#(e1T2PE; e()$s#l e()l0/ees.s#l#"/1T2PE; BEGIN q<e"/$e()(,:,' e()$4#(e' e()$s#l); DB&S$OUTPUT.PUT$LINE(AN#(e* A || e()$4#(e); DB&S$OUTPUT.PUT$LINE(AS#l#"/* A || e()$s#l); END;

!tilice variables del ;ost de i+'":Plus, ejecute >UER2$E&P con variables del ;ost e imprima las variables del ;ost?ARIABLE 4#(e ?ARC AR.(.@) ?ARIABLE s#l NU&BER E9ECUTE q<e"/$e()(,:,' *4#(e' *s#l) PRINT 4#(e s#l
Copyright 2004, Oracle. Todos los Derechos Reservados.

"lamada a P".+'" con 8ariables de <ost


!na variable de ;ost /tambi(n denominada variable ligada o global0: +e declara y e$iste fuera del subprograma P".+'"+e puede crear en:
i+'":Plus con el comando ?ARIABLE 8ariables de interfaz de usuario e internas de Oracle ,orms 8ariables =ava

%st precedida de dos puntos /*0 cuando se ;ace referencia a ella en cdigo P".+'" +e puede ;acer referencia a ella en un blo*ue annimo, pero no en un subprograma almacenado Proporciona un valor a un blo*ue P".+'" y recibe un valor de un blo*ue P".+'"
Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de Par metros IN OUT: %jemplo


%ntorno de llamada p;oneEno /antes de la llamada0 >?@@A44@CDC> p;oneEno /despu(s de la llamada0 >/?@@0A44B@CDC>

CREATE OR REPLACE PROCEDURE f0"(#5$)B04e ()B04e$40 IN OUT ?ARC AR.) IS BEGIN )B04e$40 *+ A(A || SUBSTR()B04e$40','C) || A)A || SUBSTR()B04e$40'D'C) || A-A || SUBSTR()B04e$40':); END f0"(#5$)B04e; 8

Copyright 2004, Oracle. Todos los Derechos Reservados.

+inta$is de 6ransferencia de Par metros


Posicional:
#uestra los par metros reales en el mismo orden *ue los par metros formales

Con nombre:
#uestra los par metros reales en orden arbitrario y utiliza el operador de asociacin /+E0 para asociar un par metro formal con nombre a su par metro real

Combinacin:
#uestra algunos de los par metros reales como posicionales y otros como con nombre

Copyright 2004, Oracle. Todos los Derechos Reservados.

6ransferencia de Par metros: %jemplos


CREATE OR REPLACE PROCEDURE #%%$%e)5( 4#(e IN %e)#"5(e45s.%e)#"5(e45$4#(e1T2PE' l03 IN %e)#"5(e45s.l03#5i04$i%1T2PE) IS BEGIN INSERT INTO %e)#"5(e45s(%e)#"5(e45$i%' %e)#"5(e45$4#(e' l03#5i04$i%) ?ALUES (%e)#"5(e45s$seq.NE9T?AL' 4#(e' l03); END #%%$%e)5; 8

6ransferencia por notacin posicional


E9ECUTE #%%$%e)5 (ATRAININGA' .@--)

6ransferencia por notacin con nombre

E9ECUTE #%%$%e)5 (l03+E.D--' 4#(e+EAEDUCATIONA)

Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de la Opcin DE=AULT para Par metros


Define valores por defecto para par metros:
CREATE OR REPLACE PROCEDURE #%%$%e)5( 4#(e %e)#"5(e45s.%e)#"5(e45$4#(e1T2PE*+AU4F40G4A' l03 %e)#"5(e45s.l03#5i04$i%1T2PE DE=AULT ,:--) IS BEGIN INSERT INTO %e)#"5(e45s (...) ?ALUES (%e)#"5(e45s$seq.NE9T?AL' 4#(e' l03); END #%%$%e)5;

Proporciona fle$ibilidad combinando la sinta$is de transferencia de par metros posicional y con nombre:
E9ECUTE #%%$%e)5 E9ECUTE #%%$%e)5 (AAD?ERTISINGA' l03 +E ,.--) E9ECUTE #%%$%e)5 (l03 +E ,.--)

Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de la Opcin D%,A!"6 /slo Fotas0

Copyright 2004, Oracle. Todos los Derechos Reservados.

7esumen de los #odos de Par metros


IN #odo por defecto %l valor se transfiere al subprograma %l par metro formal funciona como una constante %l par metro real puede ser un literal, una e$presin, una constante o una variable inicializada +e le puede asignar un valor por defecto OUT +e debe especificar +e devuelve al entorno de llamada 8ariable no inicializada Debe ser una variable IN OUT +e debe especificar +e transfiere al subprogramaG se devuelve al entorno de llamada 8ariable inicializada

Debe ser una variable

Fo se le puede asignar un valor por defecto

Fo se le puede asignar un valor por defecto

Copyright 2004, Oracle. Todos los Derechos Reservados.

"lamada a los Procedimientos


Puede llamar a los par metros mediante: 1lo*ues annimos Otro procedimiento, como en el siguiente ejemplo:
CREATE OR REPLACE PROCEDURE )"03ess$e()l0/ees IS CURSOR e()$3<"s0" IS SELECT e()l0/ee$i% =RO& e()l0/ees; BEGIN =OR e()$"e3 IN e()$3<"s0" LOOP "#ise$s#l#"/(e()$"e3.e()l0/ee$i%' ,-); END LOOP; CO&&IT; END )"03ess$e()l0/ees; 8
Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones #anejadas
Procedimiento de llamada PROCEDURE PROC, ... IS ... BEGIN ... PROC.(#"H,); ... E9CEPTION ... END PROC,; Procedimiento llamado PROCEDURE PROC. ... IS ... BEGIN ... E9CEPTION ... END PROC.; %l control vuelve al procedimiento de llamada

%$cepcin producida %$cepcin manejada

Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones #anejadas: %jemplo


CREATE PROCEDURE #%%$%e)#"5(e45( 4#(e ?ARC AR.' (H" NU&BER' l03 NU&BER) IS BEGIN INSERT INTO DEPART&ENTS (%e)#"5(e45$i%' %e)#"5(e45$4#(e' (#4#He"$i%' l03#5i04$i%) ?ALUES (DEPART&ENTS$SE>.NE9T?AL' 4#(e' (H"' l03); DB&S$OUTPUT.PUT$LINE(AA%%e% De)5* A||4#(e); E9CEPTION ! EN OT ERS T EN DB&S$OUTPUT.PUT$LINE(AE""* #%%i4H %e)5* A||4#(e); END; CREATE PROCEDURE 3"e#5e$%e)#"5(e45s IS BEGIN #%%$%e)#"5(e45(A&e%i#A' ,--' ,I--); #%%$%e)#"5(e45(AE%i5i4HA' JJ' ,I--); #%%$%e)#"5(e45(AA%Ke"5isi4HA' ,-,' ,I--); END;
Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones Fo #anejadas
Procedimiento de llamada PROCEDURE PROC, ... IS ... BEGIN ... PROC.(#"H,); ... E9CEPTION ... END PROC,; Procedimiento llamado PROCEDURE PROC. ... IS ... BEGIN ... E9CEPTION ... END PROC.;

%$cepcin producida %$cepcin no manejada

%l control se devuelve a la seccin de e$cepciones del procedimiento de llamada


Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones Fo #anejadas: %jemplo

CREATE PROCEDURE #%%$%e)#"5(e45$40eL( 4#(e ?ARC AR.' (H" NU&BER' l03 NU&BER) IS BEGIN INSERT INTO DEPART&ENTS (%e)#"5(e45$i%' %e)#"5(e45$4#(e' (#4#He"$i%' l03#5i04$i%) ?ALUES (DEPART&ENTS$SE>.NE9T?AL' 4#(e' (H"' l03); DB&S$OUTPUT.PUT$LINE(AA%%e% De)5* A||4#(e); END;

CREATE PROCEDURE 3"e#5e$%e)#"5(e45s$40eL IS BEGIN #%%$%e)#"5(e45$40eL(A&e%i#A' ,--' ,I--); #%%$%e)#"5(e45$40eL(AE%i5i4HA' JJ' ,I--); #%%$%e)#"5(e45$40eL(AA%Ke"5isi4HA' ,-,' ,I--); END;
Copyright 2004, Oracle. Todos los Derechos Reservados.

%liminacin de Procedimientos
Puede eliminar un procedimiento *ue est almacenado en la base de datos +inta$is:
DROP PROCEDURE procedure_name

%jemplo:
DROP PROCEDURE "#ise$s#l#"/;

Copyright 2004, Oracle. Todos los Derechos Reservados.

8isualizacin de Procedimientos en el Diccionario de Datos


"a informacin de los procedimientos P".+'" se guarda en las siguientes vistas del diccionario de datos: 8ista del cdigo de origen en la tabla USER$SOURCE para ver los subprogramas de los *ue es propietario o la tabla ALL$SOURCE para ver los procedimientos *ue son propiedad de otros usuarios *ue le ;an otorgado el privilegio E9ECUTESELECT 5eL5 =RO& <se"$s0<"3e ! ERE 4#(e+AADD$DEPART&ENTA #4% 5/)e+APROCEDUREA ORDER B2 li4e;

8ista de los nombres de procedimientos en USER$OBMECTS-

SELECT 0NOe35$4#(e =RO& <se"$0NOe35s ! ERE 0NOe35$5/)e + APROCEDUREA;


Copyright 2004, Oracle. Todos los Derechos Reservados.

8entajas de los +ubprogramas


#antenimiento sencillo Hntegridad y seguridad de datos mejorada 7endimiento mejorado Claridad de cdigo mejorada

Copyright 2004, Oracle. Todos los Derechos Reservados.

Copyright 2004, Oracle. Todos los Derechos Reservados.

7esumen
%n esta leccin, debe ;aber aprendido lo siguiente: %scribir un procedimiento para realizar una tarea o una accin Crear, compilar y guardar procedimientos en la base de datos con el comando +'" CREATE PROCEDURE !tilizar par metros para transferir datos del entorno de llamada al procedimiento con tres modos de par metros distintos: IN (valor por defecto), OUT e IN OUT. 7econocer el efecto *ue tiene manejar y no manejar e$cepciones en transacciones y procedimientos de llamada
Copyright 2004, Oracle. Todos los Derechos Reservados.

7esumen
%liminar procedimientos de la base de datos con el comando +'" DROP PROCEDURE Organizar en mdulos el cdigo de la aplicacin utilizando los procedimientos como blo*ues de construccin

Copyright 2004, Oracle. Todos los Derechos Reservados.

Pr ctica 2: 8isin Ieneral


%n esta pr ctica se abordan los siguientes temas: Creacin de procedimientos almacenados para:
Hnsertar nuevas filas en una tabla con los valores de par metros proporcionados Actualizar los datos de una tabla para las filas *ue coinciden con los valores de par metros proporcionados +uprimir filas de una tabla *ue coinciden con los valores de par metros proporcionados Consultar una tabla y recuperar datos seg9n los valores de par metros proporcionados

#anejar e$cepciones en procedimientos Compilar y llamar a procedimientos


Copyright 2004, Oracle. Todos los Derechos Reservados.

Copyright 2004, Oracle. Todos los Derechos Reservados.

Copyright 2004, Oracle. Todos los Derechos Reservados.

Creacin de Procedimientos Almacenados

Copyright 2004, Oracle. Todos los Derechos Reservados.

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B2

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo siguiente: Describir y crear un procedimiento Crear procedimientos con par metros Diferenciar entre par metros formales y reales !tilizar diferentes modos de transferencia de par metros "lamar a un procedimiento #anejar e$cepciones en procedimientos %liminar un procedimiento

Copyright 2004, Oracle. Todos los Derechos Reservados.

Objetivos %n esta leccin, aprender a crear, ejecutar y eliminar procedimientos con o sin par metros"os procedimientos son la base de la programacin modular en P".+'"- Para ;acer *ue los procedimientos sean m s fle$ibles, es importante *ue los datos variables se calculen o transfieran a un procedimiento mediante par metros de entrada- "os resultados calculados se pueden devolver al emisor de la llamada de un procedimiento con par metros de salidaPara ;acer *ue los programas sean robustos, siempre debe manejar las condiciones de e$cepcin con las funciones de manejo de e$cepciones de P".+'"-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B3

&'u( es un Procedimiento)
!n procedimiento: %s un tipo de subprograma *ue realiza una accin +e puede almacenar en la base de datos como objeto de es*uema ,omenta la capacidad de reutilizacin y mantenimiento

Copyright 2004, Oracle. Todos los Derechos Reservados.

Definicin de un Procedimiento !n procedimiento es un blo*ue P".+'" con nombre *ue puede aceptar par metros /a veces denominados argumentos0- Ieneralmente, un procedimiento se utiliza para realizar una accin- 6iene una cabecera, una seccin de declaraciones, una seccin ejecutable y una seccin de manejo de e$cepciones opcional- Para llamar a un procedimiento, se utiliza el nombre del procedimiento en la seccin ejecutable de otro blo*ue P".+'"!n procedimiento se compila y almacena en la base de datos como objeto de es*uema- +i est utilizando los procedimientos con Oracle ,orms y 7eports, (stos se pueden compilar dentro de los ejecutables de Oracle ,orms u Oracle 7eports"os procedimientos fomentan la capacidad de reutilizacin y mantenimiento- Al validarlos, se pueden utilizar en cual*uier n9mero de aplicaciones- +i los re*uisitos cambian, slo es necesario actualizar el procedimiento-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B4

+inta$is para Crear Procedimientos


!tilice CREATE PROCEDURE seguido del nombre, los par metros opcionales y la palabra clave IS o ASAgregue la opcin OR REPLACE para sustituir un procedimiento e$istente%scriba un blo*ue P".+'" *ue contenga variables locales, un valor BEGIN y un valor END /o END procedure_name0CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [mode] datatype1, parameter2 [mode] datatype2, ...)] IS|AS [local_variable_declarations; ] BEGIN 1lo*ue P".+'" -- actions; END [procedure_name];
Copyright 2004, Oracle. Todos los Derechos Reservados.

+inta$is para Crear Procedimientos +e crean nuevos procedimientos con la sentencia CREATE PROCEDURE, *ue puede declarar una lista de par metros y debe definir las acciones *ue debe realizar el blo*ue P".+'" est ndar- "a cl usula CREATE permite crear procedimientos autnomos *ue se almacenan en una base de datos Oracle "os blo*ues P".+'" empiezan por BEGIN, precedido opcionalmente por la declaracin de variables locales- "os blo*ues P".+'" terminan en END o END procedure_name "a opcin REPLACE indica *ue si el procedimiento e$iste, se borra y se sustituye por la nueva versin creada por la sentenciaOtros %lementos +int cticos parameter1 representa el nombre de un par metro "a opcin mode define cmo se utiliza un par metro: IN /valor por defecto0, OUT o IN OUT datatype1 especifica el tipo de dato del par metro, sin ninguna precisinFota: "os par metros se pueden considerar como variables locales- Fo se puede ;acer referencia a las variables de sustitucin ni de ;ost /ligadas0 en la definicin de un procedimiento P".+'" almacenado"a opcin OR REPLACE no necesita ning9n cambio en la seguridad de los objetos, siempre cuando seade el !nidades propietario del objeto y P".+'" tenga el 2B5 1ase de Datos y Oracle 2@el g: usuario Desarrollo de Programa privilegio CREATE [AN2] PROCEDURE-

Desarrollo de Procedimientos

2 %ditar file.sql

3 Cargar 4 Crear /compilar y almacenar0

5 %jecutar !tilizar S O! ERRORS para errores de compilacin


Copyright 2004, Oracle. Todos los Derechos Reservados.

Desarrollo de Procedimientos Para desarrollar un procedimiento almacenado, realice los siguientes pasos: 2- %scriba el cdigo para crear un procedimiento en un editor o procesador de te$to y, a continuacin, gu rdelo como arc;ivo de comandos +'" /normalmente con una e$tensin .sql03- Cargue el cdigo en una de las ;erramientas de desarrollo como +'":Plus o i+'":Plus4- Cree el procedimiento en la base de datos- "a sentencia CREATE PROCEDURE compila y almacena el cdigo de origen y el valor de m-code compilado en la base de datos- +i se produce un error de compilacin, el valor de m-code no se almacena y debe editar el cdigo de origen para realizar las correccionesFo se puede llamar a un procedimiento *ue contenga errores de compilacin- Para ver los errores de compilacin en +'":Plus o i+'":Plus, utilice: S O! ERRORS para el procedimiento compilado m s recientemente /el 9ltimo0

S O! ERRORS PROCEDURE )"03e%<"e$4#(e para cual*uier procedimiento compilado anteriormente 1ase de Datos Oracle 2@ gcompilacin : Desarrollo de !nidades de Programa P".+'" 2BC 5Despu(s de terminar la correctamente, ejecute el procedimiento para realizar la accin deseada- !tilice el comando E9ECUTE de i+'":Plus o

&'u( son los Par metros)


Par metros: +e declaran despu(s del nombre del subprograma en la cabecera P".+'" 6ransfieren o comunican datos entre el emisor de la llamada y el subprograma +e utilizan como variables locales, pero dependen del modo de transferencia de par metros:
!n par metro IN /valor por defecto0 proporciona valores para *ue un subprograma los procese !n par metro OUT devuelve un valor al emisor de la llamada !n par metro IN OUT proporciona un valor de entrada, *ue se puede devolver /salida0 como valor modificadoCopyright 2004, Oracle. Todos los Derechos Reservados.

&'u( son los Par metros) "os par metros se utilizan para transferir valores de datos a y desde el entorno de llamada y el procedimiento /o subprograma0- "os par metros se declaran en la cabecera del subprograma, despu(s del nombre y antes de la seccin de declaraciones de las variables locales"os par metros est n sujetos a uno de los tres modos de transferencia de par metros: IN, OUT o IN OUT !n par metro IN transfiere un valor constante desde el entorno de llamada al procedimiento!n par metro OUT transfiere un valor del procedimiento al entorno de llamada!n par metro IN OUT transfiere un valor del entorno de llamada al procedimiento y un valor posiblemente distinto del procedimiento al entorno de llamada mediante el mismo par metro-

"os par metros se pueden considerar como una forma especial de variable local, cuyos valores de entrada inicializa el entorno de llamada al llamar al subprograma y cuyos valores de salida se devuelven al entorno de llamada cuando el subprograma devuelve el control al emisor de la llamada1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2BA

Par metros ,ormales y 7eales


Par metros formales: 8ariables locales *ue se declaran en la lista de par metros de una especificacin de subprograma %jemplo:
CREATE PROCEDURE "#ise$s#l(i% NU&BER's#l NU&BER) IS BEGIN ... END "#ise$s#l;

Par metros reales: 8alores literales, variables o e$presiones utilizadas en la lista de par metros del subprograma llamado %jemplo:

e()$i% *+ ,--; "#ise$s#l(e()$i%' .---)


Copyright 2004, Oracle. Todos los Derechos Reservados.

Par metros ,ormales y 7eales "os par metros formales son variables locales *ue se declaran en la lista de par metros de una especificacin de subprograma- %n el primer ejemplo, en el procedimiento "#ise$s#l, los identificadores i% y s#l variables representan los par metros formales"os par metros reales pueden ser valores literales, variables o e$presiones *ue se proporcionan en la lista de par metros de un subprograma llamado- %n el segundo ejemplo, se realiza una llamada a "#ise$s#l, donde la variable e()$i% proporciona el valor de par metro real para el par metro formal i% y 3@@@ se proporciona como el valor de par metro real para s#l- Par metros reales: +e asocian a par metros formales durante la llamada al subprogramaPueden ser tambi(n e$presiones, como en el siguiente ejemplo: "#ise$s#l(e()$i%, "#ise7,--); "os par metros formales y reales deben ser de tipos de dato compatibles- +i es necesario, antes de asignar el valor, P".+'" convierte el tipo de dato del valor de par metro real al del par metro formal1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2BD

#odos de Par metros de Procedimiento


"os modos de par metros se especifican en la declaracin de par metros formales, despu(s del nombre del par metro y antes del tipo de dato%l modo IN es el valor por defecto si no se especifica ning9n modoCREATE PROCEDURE procedure(param [mode] datatype) ... #odos %ntorno de llamada IN /valor por defecto0 OUT IN OUT Procedimiento
Copyright 2004, Oracle. Todos los Derechos Reservados.

#odos de Par metros de Procedimiento Al crear el procedimiento, el par metro formal define un nombre de variable cuyo valor se utiliza en la seccin ejecutable del blo*ue P".+'"- %l par metro real se utiliza al llamar al procedimiento para proporcionar los valores de entrada o recibir los resultados de salida%l modo de par metro IN es el modo de transferencia por defecto- %s decir, si no se especifica ning9n modo con una declaracin de par metro, el par metro se considera un par metro IN"os modos de par metros OUT y IN OUT se deben especificar e$plcitamente en las declaraciones de par metros%l par metro datatype se especifica sin especificacin de tamaJo- +e puede especificar: Como tipo de dato e$plcito Con la definicin 1T2PE Con la definicin 1RO!T2PE

Fota: +e pueden declarar uno o m s par metros formales, separ ndolos entre s mediante una coma1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B?

!so de Par metros IN: %jemplo

CREATE OR REPLACE PROCEDURE "#ise$s#l#"/ (i% IN e()l0/ees.e()l0/ee$i%1T2PE' )e"3e45 IN NU&BER) IS BEGIN UPDATE e()l0/ees SET s#l#"/ + s#l#"/ 6 (, 7 )e"3e458,--) ! ERE e()l0/ee$i% + i%; END "#ise$s#l#"/; 8

E9ECUTE "#ise$s#l#"/(,:;',-)

Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de Par metros IN: %jemplo %l ejemplo muestra un procedimiento con dos par metros IN- Al ejecutar esta primera sentencia en i+'":Plus se crea el procedimiento "#ise$s#l#"/ en la base de datos- %l segundo ejemplo llama a "#ise$s#l#"/ y proporciona el primer valor de par metro ,:; para el identificador de empleado y un aumento del porcentaje del salario del 2@L para el segundo valor de par metroPara llamar a un procedimiento en i+'":Plus, utilice el siguiente comando E9ECUTE: %M%C!6% raiseEsalary /2DA, 2@0 Para llamar a un procedimiento desde otro procedimiento, utilice una llamada directa dentro de una seccin ejecutable del blo*ue de llamada- %n la ubicacin de la llamada al nuevo procedimiento, introduzca el nombre del procedimiento y los par metros reales- Por ejemplo: --1%IHF raiseEsalary /2DA, 2@0G 1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2BK %FDG

!so de Par metros OUT: %jemplo


CREATE OR REPLACE PROCEDURE q<e"/$e() (i% IN e()l0/ees.e()l0/ee$i%1T2PE' 4#(e OUT e()l0/ees.l#s5$4#(e1T2PE' s#l#"/ OUT e()l0/ees.s#l#"/1T2PE) IS BEGIN SELECT l#s5$4#(e' s#l#"/ INTO 4#(e' s#l#"/ =RO& e()l0/ees ! ERE e()l0/ee$i% + i%; END q<e"/$e(); DECLARE e()$4#(e e()l0/ees.l#s5$4#(e1T2PE; e()$s#l e()l0/ees.s#l#"/1T2PE; BEGIN q<e"/$e()(,:,' e()$4#(e' e()$s#l); ... END;
Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de Par metros OUT: %jemplo %n este ejemplo, se crea un procedimiento con par metros OUT para recuperar informacin sobre un empleado- %l procedimiento acepta el valor ,:, para el identificador de empleado y recupera el nombre y el salario del empleado con identificador ,:, en los dos par metros OUT- %l procedimiento q<e"/$e() tiene tres par metros formales- Dos de ellos son par metros OUT *ue devuelven valores al entorno de llamada, *ue se muestra en el recuadro de cdigo situado en la parte inferior de la transparencia- %l procedimiento acepta un valor de identificador de empleado a trav(s del par metro i%- "as variables e()$4#(e y e()$s#l#"/ se rellenan con la informacin recuperada de la consulta en los dos par metros OUT correspondientes+i imprime los valores devueltos en variables P".+'" del blo*ue de llamada *ue se muestra en el segundo blo*ue de cdigo, las variables contendr n los siguientes valores: e()$4#(e contiene el valor S(i5B e()$s#l#"/ contiene el valor :;--Fota: Aseg9rese de *ue el tipo de dato de las variables de par metros reales utilizadas para recuperar valores de los par metros OUT tiene el tamaJo suficiente contener los 1ase de para Datos Oracle 2@ g:valores Desarrollo de !nidades de Programa P".+'" 2B2@ de datos devueltos-

8isualizacin de Par metros OUT con i+'":Plus


!tilice las variables P".+'" *ue se imprimen con llamadas al procedimiento DB&S$OUTPUT.PUT$LINESET SER?EROUTPUT ON DECLARE e()$4#(e e()l0/ees.l#s5$4#(e1T2PE; e()$s#l e()l0/ees.s#l#"/1T2PE; BEGIN q<e"/$e()(,:,' e()$4#(e' e()$s#l); DB&S$OUTPUT.PUT$LINE(AN#(e* A || e()$4#(e); DB&S$OUTPUT.PUT$LINE(AS#l#"/* A || e()$s#l); END;

!tilice variables del ;ost de i+'":Plus, ejecute >UER2$E&P con variables del ;ost e imprima las variables del ;ost?ARIABLE 4#(e ?ARC AR.(.@) ?ARIABLE s#l NU&BER E9ECUTE q<e"/$e()(,:,' *4#(e' *s#l) PRINT 4#(e s#l
Copyright 2004, Oracle. Todos los Derechos Reservados.

8isualizacin de Par metros OUT con i+'":Plus "os ejemplos muestran dos formas de visualizar los valores devueltos de los par metros OUT "a primera t(cnica utiliza variables P".+'" en un blo*ue annimo para recuperar los valores del par metro OUT- %l procedimiento DB&S$OUPUT.PUT$LINE se llama para imprimir los valores *ue contienen las variables P".+'"- SET SER?EROUPUT debe estar en modo ON-

"a segunda t(cnica muestra cmo utilizar las variables i+'":Plus *ue se crean con el comando ?ARIABLE- "as variables i+'":Plus son e$ternas al blo*ue P".+'" y se conocen como variables ligadas o de ;ost- Para ;acer referencia a variables de ;ost desde un blo*ue P".+'", debe anteponer dos puntos /*0 a los nombres- Para mostrar los valores almacenados en las variables de ;ost, debe utilizar el comando PRINT de i+'":Plus seguido del nombre de la variable i+'":Plus /sin los dos puntos, ya *ue no se trata de un comando P".+'" o un conte$to0Para utilizar variables de ;ost y i+'":Plus al llamar a un procedimiento con los par metros OUT, realice los siguientes pasos: 2- Cree un arc;ivo de comandos i+'":Plus mediante un editor3- Agregue comandos para crear las variables, ejecute el procedimiento e imprima las variables1ase de Datos Oracle g: Desarrollo de !nidades de Programa P".+'" 2B22 4Cargue y ejecute el 2@ arc;ivo de comandos i+'":Plus-

"lamada a P".+'" con 8ariables de <ost


!na variable de ;ost /tambi(n denominada variable ligada o global0: +e declara y e$iste fuera del subprograma P".+'"+e puede crear en:
i+'":Plus con el comando ?ARIABLE 8ariables de interfaz de usuario e internas de Oracle ,orms 8ariables =ava

%st precedida de dos puntos /*0 cuando se ;ace referencia a ella en cdigo P".+'" +e puede ;acer referencia a ella en un blo*ue annimo, pero no en un subprograma almacenado Proporciona un valor a un blo*ue P".+'" y recibe un valor de un blo*ue P".+'"
Copyright 2004, Oracle. Todos los Derechos Reservados.

"lamada a P".+'" con 8ariables de <ost %l cdigo P".+'" *ue se almacena en la base de datos se puede llamar desde una gran variedad de entornos, como: +'":Plus o i+'":Plus Oracle ,orms y Oracle 7eports Aplicaciones =ava y C

Cada uno de los entornos indicados proporciona distintas formas de declarar variables para almacenar datos en la memoria- "os valores de variable de estas aplicaciones se definen y mantienen fuera del cdigo P".+'" almacenado- Cada entorno proporciona una forma de transferir los datos de las variables a P".+'" y recibir valores actualizados del cdigo P".+'"- %n general, la mayora de los idiomas alojan llamadas a subprogramas o blo*ues P".+'"%l sistema P".+'" utiliza una t(cnica llamada enlace para asociar los valores proporcionados desde ubicaciones e$ternas a variables P".+'" o par metros declarados en los subprogramas P".+'"A diferencia de =ava, P".+'" reconoce las variables de ;ost por la presencia de los dos puntos antes del nombre de la variable e$terna cuando se utiliza en un blo*ue P".+'"Fo puede cdigo conde variables de de ;ost, ya *ue el compilador 1ase dealmacenar Datos Oracle 2@g:P".+'" Desarrollo !nidades Programa P".+'" 2B23 no puede resolver las referencias a variables de ;ost- %l proceso de enlace se

!so de Par metros IN OUT: %jemplo


%ntorno de llamada p;oneEno /antes de la llamada0 >?@@A44@CDC> p;oneEno /despu(s de la llamada0 >/?@@0A44B@CDC>

CREATE OR REPLACE PROCEDURE f0"(#5$)B04e ()B04e$40 IN OUT ?ARC AR.) IS BEGIN )B04e$40 *+ A(A || SUBSTR()B04e$40','C) || A)A || SUBSTR()B04e$40'D'C) || A-A || SUBSTR()B04e$40':); END f0"(#5$)B04e; 8

Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de Par metros IN OUT: %jemplo Con un par metro IN OUT, puede transferir un valor a un procedimiento *ue se puede actualizar- %l valor de par metro real proporcionado desde el entorno de llamada se puede devolver de las siguientes formas: Como el valor original sin cambiar Como un nuevo valor *ue se define dentro del procedimiento Fota: !n par metro IN OUT funciona como variable inicializada%l ejemplo de la transparencia crea un procedimiento con un par metro IN OUT para aceptar una cadena de 2@ caracteres *ue contenga los dgitos de un n9mero de tel(fono- %l procedimiento devuelve el n9mero de tel(fono con los tres primeros caracteres entre par(ntesis y un guin despu(s del se$to dgito- Por ejemplo, la cadena de tel(fono ?@@A44@CDC se devuelve como /?@@0 A44B@CDC%l siguiente cdigo utiliza la variable de ;ost )B04e$40 de i+'":Plus para proporcionar el valor de entrada transferido al procedimiento =OR&AT$P ONE- %l procedimiento se ejecuta y devuelve una cadena actualizada en la variable de ;ost )B04e$408A7HA1"% p;oneEno 8A7C<A73/2C0 %M%C!6% :p;oneEno :N >?@@A44@CDC> P7HF6Oracle p;oneEno 1ase de Datos 2@g: Desarrollo de !nidades de Programa P".+'" 2B24

+inta$is de 6ransferencia de Par metros


Posicional:
#uestra los par metros reales en el mismo orden *ue los par metros formales

Con nombre:
#uestra los par metros reales en orden arbitrario y utiliza el operador de asociacin /+E0 para asociar un par metro formal con nombre a su par metro real

Combinacin:
#uestra algunos de los par metros reales como posicionales y otros como con nombre

Copyright 2004, Oracle. Todos los Derechos Reservados.

+inta$is de 6ransferencia de Par metros Para un procedimiento *ue contiene varios par metros, puede utilizar diferentes m(todos para especificar los valores de los par metros- "os m(todos son: Posicional, *ue muestra los valores de par metro real en el orden en el *ue se declaran los par metros formalesCon nombre, *ue muestra los valores reales en orden arbitrario y utiliza el operador de asociacin para asociar cada par metro real a su par metro formal por nombre- %l operador de asociacin P".+'" es un signo igual seguido de un signo mayor *ue, sin espacios: +ECombinacin, *ue muestra los primeros valores del par metro por posicin y el resto mediante la sinta$is especial del m(todo con nombre-

"a siguiente p gina muestra algunos ejemplos de los dos primeros m(todos-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B25

6ransferencia de Par metros: %jemplos


CREATE OR REPLACE PROCEDURE #%%$%e)5( 4#(e IN %e)#"5(e45s.%e)#"5(e45$4#(e1T2PE' l03 IN %e)#"5(e45s.l03#5i04$i%1T2PE) IS BEGIN INSERT INTO %e)#"5(e45s(%e)#"5(e45$i%' %e)#"5(e45$4#(e' l03#5i04$i%) ?ALUES (%e)#"5(e45s$seq.NE9T?AL' 4#(e' l03); END #%%$%e)5; 8

6ransferencia por notacin posicional


E9ECUTE #%%$%e)5 (ATRAININGA' .@--)

6ransferencia por notacin con nombre

E9ECUTE #%%$%e)5 (l03+E.D--' 4#(e+EAEDUCATIONA)

Copyright 2004, Oracle. Todos los Derechos Reservados.

6ransferencia de Par metros: %jemplos %n el ejemplo, el procedimiento #%%$%e)5 declara dos par metros IN: 4#(e y l03"os valores de estos par metros se utilizan en la sentencia INSERT para definir las columnas %e)#"5(e45$4#(e y l03#5i04$i%, respectivamente"a transferencia de par metros por posicin se muestra en la primera llamada para ejecutar #%%$%e)5 debajo de la definicin del procedimiento- %l primer par metro real proporciona el valor ATRAININGA para el par metro 4#(e- %l segundo valor de par metro real .@-se asigna por posicin al par metro l03"a transferencia de par metros con la notacin con nombre se muestra en el 9ltimo ejemplo- A*u se ;ace referencia al 9ltimo par metro l03, *ue se declara como el segundo par metro formal, seg9n el nombre en la llamada donde se asocia al valor real .D--- %l par metro 4#(e se asocia al valor AEDUCATIONA- %l orden de los par metros reales es irrelevante si se especifican todos los valores de par metroFota: Debe proporcionar un valor para cada par metro a menos *ue se asigne un valor por defecto al par metro formal- "a especificacin de valores por defecto 1ase de Datos formales Oracle 2@se g: Desarrollo !nidades de Programa P".+'" 2B2C para par metros describe a de continuacin-

!so de la Opcin DE=AULT para Par metros


Define valores por defecto para par metros:
CREATE OR REPLACE PROCEDURE #%%$%e)5( 4#(e %e)#"5(e45s.%e)#"5(e45$4#(e1T2PE*+AU4F40G4A' l03 %e)#"5(e45s.l03#5i04$i%1T2PE DE=AULT ,:--) IS BEGIN INSERT INTO %e)#"5(e45s (...) ?ALUES (%e)#"5(e45s$seq.NE9T?AL' 4#(e' l03); END #%%$%e)5;

Proporciona fle$ibilidad combinando la sinta$is de transferencia de par metros posicional y con nombre:
E9ECUTE #%%$%e)5 E9ECUTE #%%$%e)5 (AAD?ERTISINGA' l03 +E ,.--) E9ECUTE #%%$%e)5 (l03 +E ,.--)

Copyright 2004, Oracle. Todos los Derechos Reservados.

!so de la Opcin DE=AULT para Par metros "os ejemplos de cdigo de la transparencia muestran dos formas de asignar un valor por defecto a un par metro IN- "as dos formas *ue se muestran utilizan: %l operador de asignacin /:N0, como se muestra para el par metro 4#(e"a opcin DE=AULT, como se muestra para el par metro l03-

Cuando se asignan valores por defecto a par metros formales, puede llamar al procedimiento sin proporcionar un valor de par metro real para el par metro- Por lo tanto, puede transferir distinta cantidad de par metros reales a un subprograma, ya sea aceptando o sustituyendo los valores por defecto seg9n sea necesario- +e recomienda declarar los par metros sin valores por defecto primero- A continuacin, puede agregar par metros formales con valores por defecto sin tener *ue cambiar cada llamada al procedimientoFota: Fo se pueden asignar valores por defecto a par metros OUT e IN OUT"a transparencia muestra tres formas de llamar al procedimiento #%%$%e)5: %l primer ejemplo asigna los valores por defecto para cada par metro%l segundo ejemplo ilustra una combinacin de notacin posicional y con nombre para asignar valores- %n este caso, el uso de notacin con nombre se muestra como ejemplo1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B2A %l 9ltimo ejemplo utiliza el valor por defecto del par metro 4#(e y el valor

!so de la Opcin DE=AULT para Par metros /continuacin0 Formalmente, puede utilizar la notacin con nombre para sustituir los valores por defecto de los par metros formales- +in embargo, no se puede saltar la especificacin de un par metro real si no se ;a proporcionado ning9n valor por defecto para un par metro formalFota: 6odos los par metros posicionales se deben anteponer a los par metros con nombre en una llamada de subprograma- De lo contrario, recibir un mensaje de error, como se muestra en el siguiente ejemplo: %M%C!6% addEdept/nameNO>neP dept>, >neP location>0 +e genera el siguiente mensaje de error: %77O7 at line 2: O7AB@ACC@: line 2, column D: P"+B@@4@A: Prong number or types of arguments in call to >ADDED%P6> O7AB@ACC@: line 2, column D: P".+'": +tatement ignored

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B2D

7esumen de los #odos de Par metros


IN #odo por defecto %l valor se transfiere al subprograma %l par metro formal funciona como una constante %l par metro real puede ser un literal, una e$presin, una constante o una variable inicializada +e le puede asignar un valor por defecto OUT +e debe especificar +e devuelve al entorno de llamada 8ariable no inicializada Debe ser una variable IN OUT +e debe especificar +e transfiere al subprogramaG se devuelve al entorno de llamada 8ariable inicializada

Debe ser una variable

Fo se le puede asignar un valor por defecto

Fo se le puede asignar un valor por defecto

Copyright 2004, Oracle. Todos los Derechos Reservados.

7esumen de los #odos de Par metros %l modo de par metro IN es el modo por defecto si no se especifica ning9n modo en la declaracin- "os modos de par metro OUT e IN OUT se deben especificar e$plcitamente en las declaraciones de par metrosFo se puede asignar un valor a un par metro formal del modo IN ni modificar (ste en el cuerpo del procedimiento- Por defecto, el par metro IN se transfiere por referencia- +e puede asignar un valor por defecto a un par metro IN en la declaracin de par metro formal, en cuyo caso el emisor de la llamada no tendr *ue proporcionar un valor para el par metro si se aplica el valor por defecto"os par metros OUT o IN OUT deben tener un valor asignado antes de volver al entorno de llamada- Fo se pueden asignar valores por defecto a los par metros OUT e IN OUT- Para mejorar el rendimiento con par metros OUT e IN OUT, se puede utilizar la indicacin del compilador NOCOP2 para solicitar la transferencia por referenciaFota: %l uso de NOCOP2 se describe m s adelante en este curso-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B2?

"lamada a los Procedimientos


Puede llamar a los par metros mediante: 1lo*ues annimos Otro procedimiento, como en el siguiente ejemplo:
CREATE OR REPLACE PROCEDURE )"03ess$e()l0/ees IS CURSOR e()$3<"s0" IS SELECT e()l0/ee$i% =RO& e()l0/ees; BEGIN =OR e()$"e3 IN e()$3<"s0" LOOP "#ise$s#l#"/(e()$"e3.e()l0/ee$i%' ,-); END LOOP; CO&&IT; END )"03ess$e()l0/ees; 8
Copyright 2004, Oracle. Todos los Derechos Reservados.

"lamada a los Procedimientos Puede llamar a los procedimientos mediante: 1lo*ues annimos Otro procedimiento o subprograma P".+'"

Algunos ejemplos de las p ginas anteriores ilustran cmo utilizar blo*ues annimos /o el comando E9ECUTE en i+'":Plus0%ste ejemplo muestra cmo llamar a un procedimiento desde otro procedimiento almacenado%l procedimiento almacenado PROCESS$E&PS utiliza un cursor para procesar todos los registros de la tabla E&PLO2EES y transfiere cada identificador de empleado al procedimiento RAISE$SALAR2, lo *ue da como resultado un incremento de salario del 2@L en la compaJa-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B2K

%$cepciones #anejadas
Procedimiento de llamada PROCEDURE PROC, ... IS ... BEGIN ... PROC.(#"H,); ... E9CEPTION ... END PROC,; Procedimiento llamado PROCEDURE PROC. ... IS ... BEGIN ... E9CEPTION ... END PROC.; %l control vuelve al procedimiento de llamada

%$cepcin producida %$cepcin manejada

Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones #anejadas Al desarrollar procedimientos llamados desde otros procedimientos, debe tener en cuenta los efectos *ue tienen las e$cepciones manejadas y no manejadas en la transaccin y el procedimiento de llamadaCuando se produce una e$cepcin en un procedimiento llamado, el control va inmediatamente a la seccin de e$cepciones de dic;o blo*ue- !na e$cepcin se considera manejada si la seccin de e$cepciones proporciona un manejador para la e$cepcin producidaCuando se produce una e$cepcin y (sta se maneja, tiene lugar el siguiente flujo de cdigo: 2- +e produce la e$cepcin3- +e transfiere el control al manejador de e$cepciones4- %l blo*ue se termina5- %l programa o blo*ue de llamada se sigue ejecutando como si no ;ubiera ocurrido nada+i se ;a iniciado una transaccin /es decir, si se ;an ejecutado sentencias de 1ase de Datos Oracle 2@de g: Desarrollo de !nidades de Programa P".+'" 2B3@ lenguaje de manipulacin datos /D#"0 antes de ejecutar el procedimiento en

%$cepciones #anejadas: %jemplo


CREATE PROCEDURE #%%$%e)#"5(e45( 4#(e ?ARC AR.' (H" NU&BER' l03 NU&BER) IS BEGIN INSERT INTO DEPART&ENTS (%e)#"5(e45$i%' %e)#"5(e45$4#(e' (#4#He"$i%' l03#5i04$i%) ?ALUES (DEPART&ENTS$SE>.NE9T?AL' 4#(e' (H"' l03); DB&S$OUTPUT.PUT$LINE(AA%%e% De)5* A||4#(e); E9CEPTION ! EN OT ERS T EN DB&S$OUTPUT.PUT$LINE(AE""* #%%i4H %e)5* A||4#(e); END; CREATE PROCEDURE 3"e#5e$%e)#"5(e45s IS BEGIN #%%$%e)#"5(e45(A&e%i#A' ,--' ,I--); #%%$%e)#"5(e45(AE%i5i4HA' JJ' ,I--); #%%$%e)#"5(e45(AA%Ke"5isi4HA' ,-,' ,I--); END;
Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones #anejadas: %jemplo "os dos procedimientos del ejemplo son los siguientes: %l procedimiento #%%$%e)#"5(e45 crea un nuevo registro de departamento asignando un nuevo n9mero de departamento de una secuencia Oracle y define los valores de columna %e)#"5(e45$4#(e, (#4#He"$i% y l03#5i04$i% con los par metros 4#(e, (H" y l03, respectivamente%l procedimiento 3"e#5e$%e)#"5(e45s crea m s de un departamento utilizando llamadas al procedimiento #%%$%e)#"5(e45-

%l procedimiento #%%$%e)#"5(e45 recopila todas las e$cepciones producidas en su propio manejador- Cuando se ejecuta 3"e#5e$%e)#"5(e45s, se genera la siguiente salida: Added Dept: #edia %rr: Adding Dept: %diting Added Dept: Advertising %l departamento E%i5i4H con el valor JJ para (#4#He"$i% no se ;a insertado debido a una violacin de la restriccin de integridad de clave ajena en (#4#He"$i%Puesto la e$cepcin se ;a manejado en el procedimiento #%%$%e)#"5(e45 1ase *ue de Datos Oracle 2@ g: Desarrollo de !nidades de Programa P".+'" 2B32, el procedimiento 3"e#5e$%e)#"5(e45 se sigue ejecutando- !na consulta de la

%$cepciones Fo #anejadas
Procedimiento de llamada PROCEDURE PROC, ... IS ... BEGIN ... PROC.(#"H,); ... E9CEPTION ... END PROC,; Procedimiento llamado PROCEDURE PROC. ... IS ... BEGIN ... E9CEPTION ... END PROC.;

%$cepcin producida %$cepcin no manejada

%l control se devuelve a la seccin de e$cepciones del procedimiento de llamada


Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones Fo #anejadas 6al como se ;a descrito, cuando se produce una e$cepcin en un procedimiento llamado, el control va inmediatamente a la seccin de e$cepciones de dic;o blo*ue- +i la seccin de e$cepciones no proporciona un manejador para la e$cepcin producida, (sta no se maneja+e produce el siguiente flujo de cdigo: 2- +e produce la e$cepcin3- %l blo*ue termina por*ue no e$iste ning9n manejador de e$cepcionesG se realiza un rollbacQ de cual*uier operacin D#" realizada en el procedimiento4- "a e$cepcin se propaga a la seccin de e$cepciones del procedimiento de llamada%s decir, el control se devuelve a la seccin de e$cepciones del blo*ue de llamada, si e$iste+i no se maneja una e$cepcin, se realiza un rollbacQ de todas las sentencias D#" del procedimiento de llamada y el procedimiento llamado, as como de los cambios realizados en cual*uier variable de ;ost- "as sentencias D#" *ue no se 1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B33 ven afectadas son sentencias *ue se ;an ejecutado antes de llamar al cdigo P". +'" cuyas e$cepciones no se ;an manejado-

%$cepciones Fo #anejadas: %jemplo

CREATE PROCEDURE #%%$%e)#"5(e45$40eL( 4#(e ?ARC AR.' (H" NU&BER' l03 NU&BER) IS BEGIN INSERT INTO DEPART&ENTS (%e)#"5(e45$i%' %e)#"5(e45$4#(e' (#4#He"$i%' l03#5i04$i%) ?ALUES (DEPART&ENTS$SE>.NE9T?AL' 4#(e' (H"' l03); DB&S$OUTPUT.PUT$LINE(AA%%e% De)5* A||4#(e); END;

CREATE PROCEDURE 3"e#5e$%e)#"5(e45s$40eL IS BEGIN #%%$%e)#"5(e45$40eL(A&e%i#A' ,--' ,I--); #%%$%e)#"5(e45$40eL(AE%i5i4HA' JJ' ,I--); #%%$%e)#"5(e45$40eL(AA%Ke"5isi4HA' ,-,' ,I--); END;
Copyright 2004, Oracle. Todos los Derechos Reservados.

%$cepciones Fo #anejadas: %jemplo %l ejemplo de cdigo de la transparencia muestra #%%$%e)#"5(e45$40eL, *ue no tiene una seccin de e$cepciones- %n este caso, la e$cepcin se produce cuando se agrega el departamento E%i5i4H- Debido a la falta de manejo de e$cepciones en los subprogramas, no se agrega ning9n registro de departamento nuevo a la tabla DEPART&ENTS- Al ejecutar el procedimiento 3"e#5e$%e)#"5(e45s$40eL se produce un resultado similar al siguiente: Added Dept: #edia 1%IHF createEdepartmentsEnoe$G %FDG : %77O7 at line 2: O7AB@33K2: integrity constraint /O7A2-D%P6E#I7E,R0 violated B parent Qey not found O7AB@AC23: at SO7A2-ADDED%PA76#%F6EFO%MS, line 5 O7AB@AC23: SO7A2-C7%A6%ED%PA76#%F6+EFO%MS, line 5 2B34 1ase de Datos Oracleat 2@ g: Desarrollo de !nidades de Programa P".+'" O7AB@AC23: at line 2

%liminacin de Procedimientos
Puede eliminar un procedimiento *ue est almacenado en la base de datos +inta$is:
DROP PROCEDURE procedure_name

%jemplo:
DROP PROCEDURE "#ise$s#l#"/;

Copyright 2004, Oracle. Todos los Derechos Reservados.

%liminacin de Procedimientos Cuando ya no necesite un procedimiento almacenado, puede utilizar la sentencia +'" DROP PROCEDURE para eliminarloFota: Al ejecutar un comando de lenguaje de definicin de datos /DD"0 como DROP PROCEDURE, tanto si es correcto como si no, se confirma cual*uier transaccin pendiente de la *ue no se puede realizar un rollbacQ-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B35

8isualizacin de Procedimientos en el Diccionario de Datos


"a informacin de los procedimientos P".+'" se guarda en las siguientes vistas del diccionario de datos: 8ista del cdigo de origen en la tabla USER$SOURCE para ver los subprogramas de los *ue es propietario o la tabla ALL$SOURCE para ver los procedimientos *ue son propiedad de otros usuarios *ue le ;an otorgado el privilegio E9ECUTESELECT 5eL5 =RO& <se"$s0<"3e ! ERE 4#(e+AADD$DEPART&ENTA #4% 5/)e+APROCEDUREA ORDER B2 li4e;

8ista de los nombres de procedimientos en USER$OBMECTS-

SELECT 0NOe35$4#(e =RO& <se"$0NOe35s ! ERE 0NOe35$5/)e + APROCEDUREA;


Copyright 2004, Oracle. Todos los Derechos Reservados.

8isualizacin de Procedimientos en el Diccionario de Datos %l cdigo de origen para los subprogramas P".+'" se almacena en las tablas del diccionario de datos- "os procedimientos P".+'" compilados correcta o incorrectamente pueden acceder al cdigo de origen- Para ver el cdigo de origen P".+'" almacenado en el diccionario de datos, ejecute una sentencia SELECT en las siguientes tablas: %n la tabla USER$SOURCE para mostrar el cdigo P".+'" del *ue es propietario%n la tabla ALL$SOURCE para mostrar el cdigo P".+'" para el *ue el propietario de dic;o cdigo de subprograma le ;a otorgado el derec;o E9ECUTE-

%l ejemplo de consulta muestra todas las columnas *ue proporciona la tabla USER$SOURCE: "a columna TE9T contiene una lnea del cdigo de origen P".+'""a columna NA&E contiene el nombre del subprograma en may9sculas"a columna T2PE contiene el tipo de subprograma como PROCEDURE, =UNCTION-

1ase "a de columna almacena el n9mero de lnea de cada lnea del cdigo de Datos LINE Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B3C origen-

8entajas de los +ubprogramas


#antenimiento sencillo Hntegridad y seguridad de datos mejorada 7endimiento mejorado Claridad de cdigo mejorada

Copyright 2004, Oracle. Todos los Derechos Reservados.

8entajas de los +ubprogramas "os procedimientos y las funciones tienen numerosas ventajas gracias a la organizacin en mdulos del cdigo: %l mantenimiento sencillo se consigue por*ue los subprogramas est n ubicados en un solo lugar- +lo es necesario realizar las modificaciones en un lugar para *ue se apli*uen a varias aplicaciones- %sto minimiza tambi(n la realizacin de un n9mero e$cesivo de pruebas"a seguridad de datos mejorada se puede lograr controlando el acceso indirecto a los objetos de la base de datos por parte de usuarios sin privilegios mediante privilegios de seguridad- "os subprogramas ejecutados tienen por defecto los derec;os del responsable de la definicin- %l privilegio de ejecucin no permite *ue un usuario *ue realice una llamada acceda directamente a los objetos a los *ue puede acceder el subprograma"a integridad de los datos se gestiona realizando al mismo tiempo todas las acciones relacionadas o no realizando ninguna-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B3A

8entajas de los +ubprogramas /continuacin0 %l rendimiento mejorado se consigue al reutilizar cdigo P".+'" analizado *ue pasa a estar disponible en el rea +'" compartida del servidor- "as llamadas posteriores al subprograma evitan tener *ue analizar el cdigo otra vezPuesto *ue el cdigo P".+'" se analiza durante la compilacin, la sobrecarga de an lisis de sentencias +'" se evita en tiempo de ejecucin- +e puede escribir cdigo para reducir el n9mero de llamadas de red a la base de datos y, por lo tanto, disminuir el tr fico de red "a claridad de cdigo mejorada se alcanza con el uso de nombres y convenciones adecuadas para describir la accin de las rutinas, la reduccin de la necesidad de comentarios y la mejora de la claridad del cdigo-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B3D

7esumen
%n esta leccin, debe ;aber aprendido lo siguiente: %scribir un procedimiento para realizar una tarea o una accin Crear, compilar y guardar procedimientos en la base de datos con el comando +'" CREATE PROCEDURE !tilizar par metros para transferir datos del entorno de llamada al procedimiento con tres modos de par metros distintos: IN (valor por defecto), OUT e IN OUT. 7econocer el efecto *ue tiene manejar y no manejar e$cepciones en transacciones y procedimientos de llamada
Copyright 2004, Oracle. Todos los Derechos Reservados.

7esumen !n procedimiento es un subprograma *ue realiza una accin concreta- Puede compilar y guardar un procedimiento como procedimiento almacenado en la base de datos- !n procedimiento puede devolver cero o m s valores mediante sus par metros al entorno de llamada- %$isten tres modos de par metros: IN, OUT e IN OUTDebe ser capaz de manejar y no manejar e$cepciones y comprender cmo afecta el manejo de e$cepciones a las transacciones y los procedimientos de llamada"as e$cepciones se manejan en la seccin de e$cepciones de un subprograma-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B3?

7esumen
%liminar procedimientos de la base de datos con el comando +'" DROP PROCEDURE Organizar en mdulos el cdigo de la aplicacin utilizando los procedimientos como blo*ues de construccin

Copyright 2004, Oracle. Todos los Derechos Reservados.

7esumen /continuacin0 Puede modificar y eliminar procedimientos- "os procedimientos son componentes modulares *ue conforman los blo*ues de construccin de una aplicacin- 6ambi(n puede crear procedimientos de cliente para utilizar con aplicaciones de cliente-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B3K

Pr ctica 2: 8isin Ieneral


%n esta pr ctica se abordan los siguientes temas: Creacin de procedimientos almacenados para:
Hnsertar nuevas filas en una tabla con los valores de par metros proporcionados Actualizar los datos de una tabla para las filas *ue coinciden con los valores de par metros proporcionados +uprimir filas de una tabla *ue coinciden con los valores de par metros proporcionados Consultar una tabla y recuperar datos seg9n los valores de par metros proporcionados

#anejar e$cepciones en procedimientos Compilar y llamar a procedimientos


Copyright 2004, Oracle. Todos los Derechos Reservados.

Pr ctica 2: 8isin Ieneral %n esta pr ctica, se crean procedimientos *ue emiten comandos D#" y de consulta+i se producen errores de compilacin durante el uso de i+'":Plus, utilice el comando S O! ERRORS- %l uso del comando S O! ERRORS se describe en detalle en la leccin Gestin de Subprogramas+i corrige alg9n error de compilacin en i+'":Plus, ; galo en el arc;ivo de comandos original y no en el buffer y, a continuacin, vuelva a ejecutar la nueva versin del arc;ivo- De esta forma, la nueva versin del procedimiento se guardar en el diccionario de datos-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B4@

Pr ctica 2 Fota: "as descripciones de las tablas y los datos de ejemplo aparecen en el ap(ndice 1, TDescripciones de las 6ablas y DatosU- <aga clic en el botn +ave +cript para guardar los subprogramas como arc;ivos .sql en el sistema de arc;ivos localFo olvide activar SER?EROUTPUT si lo ;a desactivado previamente2- Cree y llame al procedimiento ADD$MOB y tenga en cuenta los resultadosa- Cree un procedimiento denominado ADD$MOB para insertar un nuevo trabajo en la tabla MOBS- Proporcione el identificador y el ttulo del trabajo utilizando dos par metrosb- Compile el cdigo y llame al procedimiento con IT$DBA como identificador de trabajo y D#5#N#se A%(i4is5"#50" como ttulo- Consulte la tabla MOBS para ver los resultados-

c- "lame al procedimiento de nuevo y transfiera un identificador de trabajo de ST$&AN y un ttulo de S503F &#4#He"- &'u( sucede) &Por *u() EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EE 3- Cree un procedimiento denominado UPD$MOB para modificar un trabajo en la tabla MOBSa- Cree un procedimiento denominado UPD$MOB para actualizar el ttuloProporcione el identificador de trabajo y un ttulo nuevo utilizando dos par metros- Hncluya el manejo de e$cepciones necesario si no se ;a producido la actualizacinb- Compile el cdigo, llame al procedimiento para cambiar el ttulo del identificador de trabajo IT$DBA a D#5# A%(i4is5"#50"- Consulte la tabla MOBS para ver los resultados-

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B42 Compruebe tambi(n el manejo de e$cepciones intentando actualizar un

Pr ctica 2 /continuacin0 5- Cree un procedimiento denominado GET$E&PLO2EE para consultar la tabla E&PLO2EES, lo *ue devuelve el salario y el identificador de trabajo de un empleado cuando se proporciona el identificador de empleadoa- Cree un procedimiento *ue devuelva un valor de las columnas SALAR2 y MOB$ID para el identificador de empleado especificado- Compile el cdigo y elimine los errores de sinta$isb- %jecute el procedimiento utilizando las variables del ;ost para los dos par metros OUT: <no para el salario y el otro para el identificador de trabajo- #uestre el salario y el identificador de trabajo para el identificador de empleado 23@-

c- "lame al procedimiento de nuevo y transfiera un E&PLO2EE$ID de 4@@&'u( sucede) &Por *u() EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1ase de Datos Oracle 2@g: Desarrollo de !nidades de Programa P".+'" 2B43

Potrebbero piacerti anche