select object_type, object_name --esta consulta nos indica que procedimiento hemos creado
from user_objects
where object_type='PROCEDURE' or
object_type='FUNCTION';
--Para eliminar un procedimiento/funcion
drop procedure <procedure_name>;
drop function <function_name>;
--------------------------------------------------------------------------------------------------------------------------create or replace function validaCliente (pNumCliente varchar2) ---Esta funcion sirve para validar al cliente
return boolean
is
vNumCliente Cliente.numCliente%TYPE;
begin
select numCliente into vNumCliente
from Cliente
where numCliente=pNumCliente;
return TRUE;
Exception
When no_data_found then
return FALSE;
end;
--------------------------------------------------------------------------------
sábado, 16 de junio de 2012
Procedimiento verCliente
create table CLIENTE (
NUMCLIENTE CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
DIRECCION CHAR(35),
TELEFONO CHAR(10),
TIPOPREF CHAR(25),
MAXRENT FLOAT,
constraint PK_CLIENTE primary key (NUMCLIENTE)
);
begin
insert into cliente values('CR76','Jhon','Kay','56 High ST,Londonn,SW14EH','0207774563','Departamento',450);
insert into cliente values('CR56','Aline','Stewart','64 Fern Dr, Glasgow G42 OBL','0141324182','Departamento',350);
insert into cliente values('CR74','Mike','Ritchie','63 Well St, Glasgow,G42','0141943742','Casa',750);
insert into cliente values('CR62','Mary','Tregear','12 Park PI, Glasgow, G40QR','0141225742','Departamento',600);
insert into cliente values('CR78','Juan','Kayser','55 High ST,Londonn,SW14EH','0207774564','Departamento',450);
insert into cliente values('CR57','Alicia','Soto','63 Fern Dr,. GlasgowG42 OBL','0141324183','Departamento',350);
insert into cliente values('CR72','Miguel','Torres','62 Well St, Glasgow,G42','0141943740','Casa',750);
insert into cliente values('CR63','Maria','Perez','13 Park PI, Glasgow,G4 0QR','0141225741','Departamento',600);
end;
set serveroutput on
create or replace procedure verCliente (pNumCliente varchar2) is
vNumCliente Cliente.numCliente%Type;
vNombre Cliente.nombre%TYPE;
vApellido Cliente.apellido%TYPE;
begin
select numCliente, nombre, apellido
into vNumCliente, vNombre, vApellido
from Cliente
where numCliente = pNumCliente;
DBMS_OUTPUT.PUT_LINE('NumCliente :' ||vNumCliente||'Nombre :'||trim(vNombre)||' Apellido : '||vApellido);
Exception
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No hemos encontrado al Cliente' || pNumCliente);
end;
--Para invocar un procedimiento basta nombrarlo indicando los parametros requeridos
SET SERVEROUTPUT ON
begin
verCliente('CR78');
end;
show errors;
NUMCLIENTE CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
DIRECCION CHAR(35),
TELEFONO CHAR(10),
TIPOPREF CHAR(25),
MAXRENT FLOAT,
constraint PK_CLIENTE primary key (NUMCLIENTE)
);
begin
insert into cliente values('CR76','Jhon','Kay','56 High ST,Londonn,SW14EH','0207774563','Departamento',450);
insert into cliente values('CR56','Aline','Stewart','64 Fern Dr, Glasgow G42 OBL','0141324182','Departamento',350);
insert into cliente values('CR74','Mike','Ritchie','63 Well St, Glasgow,G42','0141943742','Casa',750);
insert into cliente values('CR62','Mary','Tregear','12 Park PI, Glasgow, G40QR','0141225742','Departamento',600);
insert into cliente values('CR78','Juan','Kayser','55 High ST,Londonn,SW14EH','0207774564','Departamento',450);
insert into cliente values('CR57','Alicia','Soto','63 Fern Dr,. GlasgowG42 OBL','0141324183','Departamento',350);
insert into cliente values('CR72','Miguel','Torres','62 Well St, Glasgow,G42','0141943740','Casa',750);
insert into cliente values('CR63','Maria','Perez','13 Park PI, Glasgow,G4 0QR','0141225741','Departamento',600);
end;
set serveroutput on
create or replace procedure verCliente (pNumCliente varchar2) is
vNumCliente Cliente.numCliente%Type;
vNombre Cliente.nombre%TYPE;
vApellido Cliente.apellido%TYPE;
begin
select numCliente, nombre, apellido
into vNumCliente, vNombre, vApellido
from Cliente
where numCliente = pNumCliente;
DBMS_OUTPUT.PUT_LINE('NumCliente :' ||vNumCliente||'Nombre :'||trim(vNombre)||' Apellido : '||vApellido);
Exception
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No hemos encontrado al Cliente' || pNumCliente);
end;
--Para invocar un procedimiento basta nombrarlo indicando los parametros requeridos
SET SERVEROUTPUT ON
begin
verCliente('CR78');
end;
show errors;
miércoles, 13 de junio de 2012
set serveroutput on
Create Table Cliente( --Creacion de la tabla cliente
NumCliente varchar2(4) not null,
Nombre varchar2(30) ,
Apellido varchar2(30),
Direccion varchar2(35),
Telefono varchar2(15) ,
TipoPref varchar2(25) ,
MaxRent Float,
Constraint PK_CLIENTE PRIMARY KEY (NumCliente)
);
--Ahora insertamos registros
begin
insert into cliente values('CR78' , 'Juan' , 'Kayser', 'Alameda Numero 23' , '9898765' , 'Dpto' , '100000');
insert into cliente values('CR79' , 'Miguel' , 'Sepulveda', 'Mar de Drake N°69' , '69696969' , 'Casa' , '1000000');
insert into cliente values('CR80' , 'Gerald Mauricio' , 'Caris', 'Bellavista N° 23' , '98765432' , 'Dpto' , '900000');
insert into cliente values('CR81' , 'Enrique' , 'Mimó', 'San Ramon N°314' , '99999999' , 'Parcela' , '1000000');
END;
select *from Cliente; --Con este select se ve los ingresos a la Tabla Cliente
---Procedimiento Ver Cliente
Create or Replace Procedure verCliente (pNumCliente varchar2)IS
vNumCliente Cliente.numCliente%TYPE;
vNombre Cliente.nombre%TYPE;
vApellido Cliente.apellido%TYPE;
BEGIN
select numCliente, nombre, apellido
into vNumCliente, vNombre, vApellido
from Cliente
where numCliente=pNumCliente;
DBMS_OUTPUt.PUT_LINE('NumCliente : ' ||vNumCliente || ' Nombre : ' ||trim(vNombre) || ' Apellido : ' ||vApellido);
Exception
When no_data_found then
DBMS_OUTPUT.PUT_LINE( ' NO SE ENCUENTRA EL CLIENTE ' || pNumCliente );
END;
----EL PROCEDIMIENTO verCliente me compilo, pero me arroja un Warning....
show errors;
--Para invocar a un procedimiento:
begin
verCliente('CR79');
END;
show errors;
Create Table Cliente( --Creacion de la tabla cliente
NumCliente varchar2(4) not null,
Nombre varchar2(30) ,
Apellido varchar2(30),
Direccion varchar2(35),
Telefono varchar2(15) ,
TipoPref varchar2(25) ,
MaxRent Float,
Constraint PK_CLIENTE PRIMARY KEY (NumCliente)
);
--Ahora insertamos registros
begin
insert into cliente values('CR78' , 'Juan' , 'Kayser', 'Alameda Numero 23' , '9898765' , 'Dpto' , '100000');
insert into cliente values('CR79' , 'Miguel' , 'Sepulveda', 'Mar de Drake N°69' , '69696969' , 'Casa' , '1000000');
insert into cliente values('CR80' , 'Gerald Mauricio' , 'Caris', 'Bellavista N° 23' , '98765432' , 'Dpto' , '900000');
insert into cliente values('CR81' , 'Enrique' , 'Mimó', 'San Ramon N°314' , '99999999' , 'Parcela' , '1000000');
END;
select *from Cliente; --Con este select se ve los ingresos a la Tabla Cliente
---Procedimiento Ver Cliente
Create or Replace Procedure verCliente (pNumCliente varchar2)IS
vNumCliente Cliente.numCliente%TYPE;
vNombre Cliente.nombre%TYPE;
vApellido Cliente.apellido%TYPE;
BEGIN
select numCliente, nombre, apellido
into vNumCliente, vNombre, vApellido
from Cliente
where numCliente=pNumCliente;
DBMS_OUTPUt.PUT_LINE('NumCliente : ' ||vNumCliente || ' Nombre : ' ||trim(vNombre) || ' Apellido : ' ||vApellido);
Exception
When no_data_found then
DBMS_OUTPUT.PUT_LINE( ' NO SE ENCUENTRA EL CLIENTE ' || pNumCliente );
END;
----EL PROCEDIMIENTO verCliente me compilo, pero me arroja un Warning....
show errors;
--Para invocar a un procedimiento:
begin
verCliente('CR79');
END;
show errors;
martes, 12 de junio de 2012
INICIALIZACION DEL PAQUETE
El paquete se instancia la primera vez que se llama a uno de los subprogramas en el empaquetados, lo que significa que el paquete se lee de disco y se lleva a memoria, y se ejecuta el codigo compilado del subprograma al que se llama. En esta situacion se asigna memoria para todas las variables definidas en el paquete. Cada sesion tendra su propia copia de las variables empaquetadas, asegurando que dos sesiones que ejecuten subprogramas contenidos en el mismo paquete utilicen ubicaciones de memoria diferentes.
En ocaciones, es conveniente ejecutar un codigo de inicializacion la primera vez que se instancia el paquete, lo que puede hacerse añadiendo una seccion de inicializacion en el cuerpo del paquete, despues de todos los demas objetos.
CREATE [OR REPLACE] PACKAGE BODY<NOMBRE_PAQUETE>IS
.............................................................................................................................
BEGIN
--Codigo de Inicializacion
END[<NOMBRE_PAQUETE>];
En ocaciones, es conveniente ejecutar un codigo de inicializacion la primera vez que se instancia el paquete, lo que puede hacerse añadiendo una seccion de inicializacion en el cuerpo del paquete, despues de todos los demas objetos.
CREATE [OR REPLACE] PACKAGE BODY<NOMBRE_PAQUETE>IS
.............................................................................................................................
BEGIN
--Codigo de Inicializacion
END[<NOMBRE_PAQUETE>];
SOBRECARGA DE SUBPROGRAMAS EMPAQUETEADOS
Los procedimientos y funciones dentro de un paquete pueden sobrecargarse, lo que significa que puede haber mas de un procedimiento o una funcion con el mismo nombre, pero con diferenetes parametros. La sobrecarga esta permitida para distinto numero de parametros, o bien, para distinto tipo de familia de dato. No esta permitida para diferentes tipos retornados por una funcion, ni para distintos modos de recepcion de los parametros (IN, OUT, IN OUT).
PAQUETES
Un Paquete es una estructura PL/SQL que permite almacenar juntos varios objetos relacionados entre si. Un Paquete tiene dos partes separadas:
La especificacion y el cuerpo.
Cada una de ellas se almacena independientemente en el diccionario de datos.
Un Paquete es fundamentalmente una seccion delarativa. Cualquier codigo que pueda incluirse en la parte declarativa de un bloque puede incluirse en un paquete, incluidos procedimientos, funciones, cursores y variables.
Los Paquetes no pueden ser llamados o pasados como parametros.
La especificacion del paquete incluye informacion acerca de contenido del paquete. Sin embargo no contiene codigo para ninguno de los procedimientos.
CREATE [OR REPLACE] PACKAGE<NOMBRE_PAQUETE>IS
--Especificaciones de procedimientos
--Especificaciones de funciones
--Declaraciones de variables
--Declaraciones de Excepciones
--Declaraciones de Cursores
END[<NOMBRE_PAQUETE>];
El Cuerpo del Paquete es un Objeto independiente de la cabezera del paquete en el diccionario de datos. El Cuerpo del paquete no puede compilarse hasta que la cabecera del paquete se haya compilado correctamente. El cuerpo contiene el codigo correspondiente a las declaraciones formales de los subprogramas que aparecen en la cabecera del paquete.
CREATE[OR REPLACE] PACKAGE BODY<NOMBRE_PAQUETE>IS
--Declaraciones de los subprogramas
END[<NOMBRE_PAQUETE>];
Cualquier objeto que se declare en la cabecera del paquete, se encuentra dentro de ambito y es visible desde fuera del paquete, siempre que el objeto se distinga precediendole con el nombre del paquete donde se encuentra definido.
La especificacion y el cuerpo.
Cada una de ellas se almacena independientemente en el diccionario de datos.
Un Paquete es fundamentalmente una seccion delarativa. Cualquier codigo que pueda incluirse en la parte declarativa de un bloque puede incluirse en un paquete, incluidos procedimientos, funciones, cursores y variables.
Los Paquetes no pueden ser llamados o pasados como parametros.
La especificacion del paquete incluye informacion acerca de contenido del paquete. Sin embargo no contiene codigo para ninguno de los procedimientos.
CREATE [OR REPLACE] PACKAGE<NOMBRE_PAQUETE>IS
--Especificaciones de procedimientos
--Especificaciones de funciones
--Declaraciones de variables
--Declaraciones de Excepciones
--Declaraciones de Cursores
END[<NOMBRE_PAQUETE>];
El Cuerpo del Paquete es un Objeto independiente de la cabezera del paquete en el diccionario de datos. El Cuerpo del paquete no puede compilarse hasta que la cabecera del paquete se haya compilado correctamente. El cuerpo contiene el codigo correspondiente a las declaraciones formales de los subprogramas que aparecen en la cabecera del paquete.
CREATE[OR REPLACE] PACKAGE BODY<NOMBRE_PAQUETE>IS
--Declaraciones de los subprogramas
END[<NOMBRE_PAQUETE>];
Cualquier objeto que se declare en la cabecera del paquete, se encuentra dentro de ambito y es visible desde fuera del paquete, siempre que el objeto se distinga precediendole con el nombre del paquete donde se encuentra definido.
lunes, 11 de junio de 2012
EXCEPCIONES
Si ocurre en error dentro de un subprograma, se genera una excepcion. Si el procedimiento no tiene control de excepcion, o bien, se genera la rutina de tratamiento de excepciones, se pasa inmediatamente el control al entorno que efectuo la llamada, segun la propagacion de excepciones. Sin embargo, los valores de los parametros formales con modo OUT y modo IN OUT no se devuelven a los parametros reales.
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE RaiseError(
p_Raise IN BOOLEAN, p_ParameterA OUT NUMBER) AS
BEGIN
p_ParameterA:=7;
IF p_Raise THEN
RAISE DUP_VAL_ON_INDEX;
END IF;
END RaiseError;
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE RaiseError(
p_Raise IN BOOLEAN, p_ParameterA OUT NUMBER) AS
BEGIN
p_ParameterA:=7;
IF p_Raise THEN
RAISE DUP_VAL_ON_INDEX;
END IF;
END RaiseError;
FUNCION FACTORIAL
---La siguiente funcion, calcula el valor factorial a partir de un numero recibido--
CREATE OR REPLACE FUNCTION FACTORIAL(N IN NUMBER) RETURN NUMBER IS
BEGIN
IF N<0 THEN
RETURN NULL;
END IF;
IF N=0 OR N=1 THEN
RETURN 1;
ELSE
RETURN N*FACTORIAL(N-1);
END IF;
END;
SELECT FACTORIAL(4) FROM DUAL;
CREATE OR REPLACE FUNCTION FACTORIAL(N IN NUMBER) RETURN NUMBER IS
BEGIN
IF N<0 THEN
RETURN NULL;
END IF;
IF N=0 OR N=1 THEN
RETURN 1;
ELSE
RETURN N*FACTORIAL(N-1);
END IF;
END;
SELECT FACTORIAL(4) FROM DUAL;
--------------------Este procedimiento ilustra diferentes modos de parametros y asignaciones de parametros-----
CREATE OR REPLACE PROCEDURE TEST(
p_In IN NUMBER,
p_Out OUT NUMBER,
p_InOut IN OUT NUMBER) IS
v_LocalVariable NUMBER := 0;
begin
DBMS_OUTPUT.PUT_LINE('AL PRINCIPIO DE Test:');
IF(p_In IS NULL)THEN
DBMS_OUTPUT.PUT_LINE('p_In is NULL');
ELSE
DBMS_OUTPUT.PUT_LINE('p_in' || ' = ' || p_In);
END IF;
END;
CREATE OR REPLACE PROCEDURE TEST(
p_In IN NUMBER,
p_Out OUT NUMBER,
p_InOut IN OUT NUMBER) IS
v_LocalVariable NUMBER := 0;
begin
DBMS_OUTPUT.PUT_LINE('AL PRINCIPIO DE Test:');
IF(p_In IS NULL)THEN
DBMS_OUTPUT.PUT_LINE('p_In is NULL');
ELSE
DBMS_OUTPUT.PUT_LINE('p_in' || ' = ' || p_In);
END IF;
END;
MODOS DE LOS PARAMETROS:
IN: El valor del parametro real se pasa al procedimiento cuando se produce el llamado al mismo. Dentro del procedimiento, el parametro formal se comporta como una constante(SOLO LECTURA). Cuando el procedimiento finaliza y devuelve el control al entorno en el que se produjo la llamada, el parametro real no se modifica.
OUT: Se ignora cualquer valor que el parametro real pueda tener cuando se produzca la llamada al procedimiento. Dentro del procedimiento, el parametro formal se comporta como una variable sin inicializar, por lo que contiene el valor NULL . Puede leerse dicha variable y en escribirse. Cuando el Procedimiento finaliza y devuelve el control al entorno en el que se produjo la llamada, se asigna el valor del parametro formal al parametro real.
IN OUT: Este metodo es una combinacion de los modos IN y OUT. El valor del parametro real se pasa al procedimiento cuando se produce la llamada. Dentro del procedimiento, el parametro formal se comporta como una variable inicializada, pudiendose leer y escribir en ella. Cuando el procedimiento finaliza y devuelve el control al entorno en el que se produjo la llamada, los contenidos del parametro formal se asignan al parametro real.
IN: El valor del parametro real se pasa al procedimiento cuando se produce el llamado al mismo. Dentro del procedimiento, el parametro formal se comporta como una constante(SOLO LECTURA). Cuando el procedimiento finaliza y devuelve el control al entorno en el que se produjo la llamada, el parametro real no se modifica.
OUT: Se ignora cualquer valor que el parametro real pueda tener cuando se produzca la llamada al procedimiento. Dentro del procedimiento, el parametro formal se comporta como una variable sin inicializar, por lo que contiene el valor NULL . Puede leerse dicha variable y en escribirse. Cuando el Procedimiento finaliza y devuelve el control al entorno en el que se produjo la llamada, se asigna el valor del parametro formal al parametro real.
IN OUT: Este metodo es una combinacion de los modos IN y OUT. El valor del parametro real se pasa al procedimiento cuando se produce la llamada. Dentro del procedimiento, el parametro formal se comporta como una variable inicializada, pudiendose leer y escribir en ella. Cuando el procedimiento finaliza y devuelve el control al entorno en el que se produjo la llamada, los contenidos del parametro formal se asignan al parametro real.
domingo, 10 de junio de 2012
BORRAR FUNCIONES
BORRAR FUNCIONES:
EL COMANDO DROP FUNCION Elimins la funcion indicada.
DROP FUNCTION <NOMBRE FUNCION>
EL COMANDO DROP FUNCION Elimins la funcion indicada.
DROP FUNCTION <NOMBRE FUNCION>
FUNCIONES
FUNCIONES: Las Funciones son similares a los procedimientos. La diferencia es que las funciones al menos deben regresar un valor.
CREAR FUNCIONES:
CREATE [OR REPLACE] FUNCTION<NOMBRE_FUNCION>
[(<PARAMETRO_1>[IN | OUT | IN OUT]<TIPO_1>
..............................................................
<PARAMETRO_N> [IN |OUT | IN OUT] <TIPO_N>]
RETURN <TIPO_RETORNO> IS
<CUERPO_FUNCION>
Donde <CUERPO_FUNCION> es un bloque PL/SQL que contiene el codigo para la funcion, y dentro de este debe estar la instruccion RETURN. Toda FUNCION ha de devolver un valor, lo cual implica utilizar la INSTRUCCION RETURN seguida del valor que devuelve.
CREAR FUNCIONES:
CREATE [OR REPLACE] FUNCTION<NOMBRE_FUNCION>
[(<PARAMETRO_1>[IN | OUT | IN OUT]<TIPO_1>
..............................................................
<PARAMETRO_N> [IN |OUT | IN OUT] <TIPO_N>]
RETURN <TIPO_RETORNO> IS
<CUERPO_FUNCION>
Donde <CUERPO_FUNCION> es un bloque PL/SQL que contiene el codigo para la funcion, y dentro de este debe estar la instruccion RETURN. Toda FUNCION ha de devolver un valor, lo cual implica utilizar la INSTRUCCION RETURN seguida del valor que devuelve.
Borrar Procedimientos
Borrar Procedimientos:
El comando DROP PROCEDURE elimina el procedimiento indicado.
DROP PROCEDURE <NOMBRE_PROCEDIMIENTO>
El comando DROP PROCEDURE elimina el procedimiento indicado.
DROP PROCEDURE <NOMBRE_PROCEDIMIENTO>
PROCEDIMIENTOS
Procedimientos: Un procedimiento es un bloque PL/SQL al que se le asigna un nombre. Un procedimiento se crea para que realice una determinada tarea de gestion.
Los ´procedimientos son compilados y almacenados en la base de datos. Gracias a ello se consigue una reutilizacion eficiente del codigo, ya que se puede invocar al procedimiento las veces que haga falta desde otro codigo o desde una herramienta de desarrollo como SQL DEVOLPER. Una vez almacenados pueden ser modificados denuevo.
Crear Procedimiento:
CREATE [OR REPLACE] PROCEDURE <NOMBRE_PROCEDIMIENTO>
[(<PARAMETRO_1>[IN |OUT| IN OUT]<TIPO_1>
............................................................................................................................
<PARAMETRO_N[IN |OUT|IN OUT]<TIPO_N)] IS
<CUERPO_PROCEDIMIENTO>
La opcion REPLACE hace que si ya existe un procedimiento con ese nombre, se reemplaza el anterior con el que se crea ahora. Los Parametros son la lista de variables que necesita el procedimiento para realizar su tarea, se indica el tipo de los mismos, pero no su tamaño (VARCHAR2 Y NO VARCHAR2(50)).
En los Parametros, el modo pueden ser las palabras IN, OUT o IN OUT.
La palabra DECLARE no se utiliza, la seccion de declaraciones figura tras las palabras IS o AS.
<CUERPO PROCEDIMIENTO> es un bloque PL/SQL que contiene el codigo para el procedimiento.p
Los ´procedimientos son compilados y almacenados en la base de datos. Gracias a ello se consigue una reutilizacion eficiente del codigo, ya que se puede invocar al procedimiento las veces que haga falta desde otro codigo o desde una herramienta de desarrollo como SQL DEVOLPER. Una vez almacenados pueden ser modificados denuevo.
Crear Procedimiento:
CREATE [OR REPLACE] PROCEDURE <NOMBRE_PROCEDIMIENTO>
[(<PARAMETRO_1>[IN |OUT| IN OUT]<TIPO_1>
............................................................................................................................
<PARAMETRO_N[IN |OUT|IN OUT]<TIPO_N)] IS
<CUERPO_PROCEDIMIENTO>
La opcion REPLACE hace que si ya existe un procedimiento con ese nombre, se reemplaza el anterior con el que se crea ahora. Los Parametros son la lista de variables que necesita el procedimiento para realizar su tarea, se indica el tipo de los mismos, pero no su tamaño (VARCHAR2 Y NO VARCHAR2(50)).
En los Parametros, el modo pueden ser las palabras IN, OUT o IN OUT.
La palabra DECLARE no se utiliza, la seccion de declaraciones figura tras las palabras IS o AS.
<CUERPO PROCEDIMIENTO> es un bloque PL/SQL que contiene el codigo para el procedimiento.p
Suscribirse a:
Entradas (Atom)