sábado, 16 de junio de 2012

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;

--------------------------------------------------------------------------------

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;
http://orahelp.blogspot.com/2007/07/dream-home-completo.html

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;

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>];

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.