Sie sind auf Seite 1von 32

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.

Das könnte Ihnen auch gefallen