Anda di halaman 1dari 20

Permiten agrupar y organizar tareas repetitivas.

Ventajas: - comparten la lgica de la aplicacin con las otras aplicaciones, con lo cual el acceso y las modificaciones de los datos se hacen en un solo sitio. permiten realizar todas las operaciones que los usuarios necesitan evitando que tengan acceso directo a las tablas. reducen el trfico de red; en vez de enviar muchas instrucciones, los usuarios realizan operaciones enviando una nica instruccin, lo cual disminuye el nmero de solicitudes entre el cliente y el servidor. Un procedimiento almacenados puede hacer referencia a objetos que no existen al momento de crearlo. Los objetos deben existir cuando se ejecute el procedimiento almacenado.

Procedimientos almacenados

Los procedimientos almacenados pueden hacer referencia a tablas, vistas, a funciones definidas por el usuario, a otros procedimientos almacenados. Un procedimiento almacenado pueden incluir cualquier cantidad y tipo de instrucciones DML (de manipulacin de datos, como insert, update, delete), no instrucciones DDL (de definicin de datos, como create..., drop... alter...).

Sintaxis

create procedure". La sintaxis bsica parcial es: create or replace procedure NOMBREPROCEDIMIENTO as Begin INSTRUCCIONES end; El bloque de instrucciones comienza luego de "begin" y acaba con "end". Para diferenciar los procedimientos almacenados del sistema de los procedimientos almacenados creados por el usuario se recomienda un prefijo, por ejemplo "pa_" cuando les de el nombre.

Creacin y ejecucin

Create or replace procedure pa_libros_aumentar10 as update libros set precio=precio+precio*0.1;

Para ejecutar el procedimiento almacenado execute pa_libros_aumentar10;

Eliminar
Los procedimientos almacenados se eliminan con "drop procedure". Sintaxis: drop procedure NOMBREPROCEDIMIENTO; Eliminamos el procedimiento almacenado llamado "pa_libros_aumentar10": drop procedure pa_libros_aumentar10;

SP con parmetros

Para que un procedimiento almacenado admita parmetros de entrada se deben declarar al crearlo. La sintaxis es: create or replace procedure NOMBREPROCEDIMIENTO (PARAMETRO in TIPODEDATO) As begin INSTRUCCIONES; end;

Ejemplo
create or replace procedure pa_libros_aumentar(aeditorial in varchar2,aporcentaje in number default 10) as begin update libros set precio= precio +(precio* aporcentaje/ 100 ) where editorial=aeditorial; end; El procedimiento se ejecuta execute pa_libros_aumentar('Planeta',30);

Valores por defecto

En caso que un procedimiento tenga definidos varios parmetros con valores por defecto y al invocarlo colocamos uno solo, Oracle asume que es el primero de ellos. si son de tipos de datos diferentes, Oracle los convierte. Por ejemplo, definimos un procedimiento almacenado de la siguiente manera: create or replace procedure pa_libros_insertar (atitulo in varchar2 default null, aautor in varchar2 default 'desconocido', aeditorial in varchar2 default 'sin especificar', aprecio in number default 0) As begin insert into libros values (atitulo,aautor,aeditorial,aprecio); end;

Si luego llamamos al procedimiento envindoles solamente el primer y cuarto parmetro correspondientes al ttulo y precio: execute pa_libros_insertar('Uno',100); Oracle asume que los argumentos son el primero y segundo, el registro que se almacenar ser: Uno,100,sin especificar,0;

Uso de variables

Las variables se definen antes del bloque de sentencias; pueden declararse varias. Creamos un procedimiento que recibe el nombre de un libro, en una variable guardamos el nombre del autor de tal libro, luego buscamos todos los libros de ese autor y los almacenamos en una tabla: create or replace procedure pa_autorlibro(atitulo in varchar2) as vautor varchar2; begin vautor= select autor from libros where titulo=atitulo; drop table tabla1; create table tabla1( titulo varchar2(40), precio number(6,2) ); insert into tabla1 select titulo,precio from libros where autor=vautor; end;

execute pa_autorlibro('Ilusiones');

SP INFORMACIN

Los procedimientos almacenados son objetos, as que para obtener informacin de ellos pueden consultarse los siguientes diccionarios: - "user_objects": nos muestra todos los objetos de la base de datos seleccionada, incluidos los procedimientos. En la columna "object_type" aparece "procedure" si es un procedimiento almacenado. En el siguiente ejemplo solicitamos todos los objetos que son procedimientos: select *from user_objects where object_type='PROCEDURE'; - "user_procedures": nos muestra todos los procedimientos almacenados de la base de datos actual. En el siguiente ejemplo solicitamos informacin de todos los procedimientos que comienzan con "PA": select *from user_procedures where object_name like

FUNCIONES

create or replace function NOMBREFUNCION(PARAMETRO1 TIPODATO, PARAMETRON TIPODATO) return TIPODEDATO is DECLARACION DE VARIABLES begin ACCIONES; return VALOR; end; La siguiente funcion recibe 1 parmetro, un valor a incrementar y retorna el valor ingresado como argumento con el incremento del 10%: create or replace function f_incremento10 (avalor number) return number is begin return avalor+(avalor*0.1); end; Podemos emplear las funciones en cualquier lugar en el que se permita una expresin en una sentencia "select", por ejemplo: select titulo,precio,f_incremento10(precio) from libros;

Ejemplo

create or replace function f_costoso (avalor number) return varchar is valorretornado varchar(20); begin valorretornado:=''; if avalor<=20 then valorretornado:='economico'; else valorretornado:='costoso'; end if; return valorretornado; end; Realizamos un "select" y llamamos a la funcin creada anteriormente, enviando como argumento el campo "precio": select titulo,precio,f_costoso(precio) from libros;

Tomar en cuenta

Para asignar un valor a una variable, dentro de una funcin DEBE usarse ":=" (dos puntos e igual). Si no se le definen parmetros a una funcin, no deben colocarse los parntesis. Podemos emplear una funcin sin incluir campos de una tabla. Por ejemplo: select f_costoso (10) from dual; Para almacenar los valores de un "select" debemos tipear: select ...into VARIABLE from... Por ejemplo: select sum(precio) into variable from libros where autor='';

Control de flujo

f... else" testea una condicin; se emplea cuando un bloque de sentencias debe ser ejecutado si una condicin se cumple y si no se cumple, se debe ejecutar otro bloque de sentencias diferente. Sintaxis: if (CONDICION) then SENTENCIAS -- si la condicin se cumple else SENTENCIAS -- si la condicin resulta falsa end if;

case

create or replace function f_mes(afecha date) return varchar2 is mes varchar2(20); begin mes:='enero'; case extract(month from afecha) when 1 then mes:='enero'; when 2 then mes:='febrero'; when 3 then mes:='marzo'; else mes:='diciembre'; end case; return mes; end; Si probamos la funcin anterior envindole la siguiente fecha: select f_mes('10/10/2011') from dual;

loop set serveroutput on;


declare resultado number; multiplicador number:=0; begin loop resultado:=3*multiplicador; dbms_output.put_line('3x'||to_char(multiplicador)||'='||to_char(r esultado)); multiplicador:=multiplicador+1; exit when multiplicador>5 end loop; end;

for
set serveroutput on; begin for f in 0..5 loop dbms_output.put_line('3x'||to_char(f)||'='| |to_char(f*3)); end loop; end;

TRIGGERS

Sintaxis general para crear un disparador: create or replace trigger NOMBREDISPARADOR MOMENTO-- before, after o instead of EVENTO -- insert, update o delete of CAMPOS-- solo para update on NOMBRETABLA NIVEL--puede ser a nivel de sentencia (statement) o de fila (for each row) when CONDICION--opcional begin CUERPO DEL DISPARADORsentencias end NOMBREDISPARADOR;

Informacin

- "user_objects": nos muestra todos los objetos de la base de datos seleccionada, incluidos los triggers. En la columna "object_type" aparece "trigger" si es un disparador. ejemplo solicitamos todos los objetos que son disparadores: select *from user_objects where object_type='TRIGGER'; "user_triggers": los triggers de la base de datos actual. Muestra el nombre del desencadenador (trigger_name), si es before o after y si es a nivel de sentencia o por fila (trigger_type), el evento que lo desencadena (triggering_event), a qu objeto est asociado, si tabla o vista (base_object_type), el nombre de la tabla al que est asociado (table_name), los campos, si hay referencias, el estado, la descripcin, el cuerpo (trigger_body), etc ejemplo solicitamos informacin de todos los disparadores que comienzan con "TR": select trigger_name, triggering_event from user_triggers where trigger_name like 'TR%'; "user_source": se puede visualizar el cdigo fuente almacenado en un disparador consultando este diccionario: En el siguiente ejemplo solicitamos el cdigo fuente del objeto "TR_insertar_libros": select *from user_source where name='TR_INSERTAR_LIBROS';

Anda mungkin juga menyukai