jueves, 1 de marzo de 2007

Stored Procedures con Oracle10 EX

Procediniento sencillo que busca un registro coincidente con el argumento p_email que proviene de un servlet, si no encuntra coincidencias, creará un nuevo registro.

CREATE OR REPLACE PROCEDURE INSERTA_CLIENTE(p_idCliente out Cliente.idCliente%TYPE, p_nombre in Cliente.Nombre%TYPE,
p_apaterno in Cliente.APaterno%TYPE, p_amaterno in Cliente.AMaterno%TYPE, p_email in Cliente.Email%TYPE,
p_estado in Cliente.Estado%TYPE,p_ciudad in Cliente.Ciudad%TYPE,
p_pwd in Cliente.Pwd%TYPE)

AS

aux Cliente.idCliente%TYPE;

BEGIN

SELECT idCliente INTO aux FROM Cliente

WHERE lower(email)= lower(p_email);

p_idCliente:=-1;

EXCEPTION

WHEN NO_DATA_FOUND THEN // (NO_DATA_FOUND es una constante de oracle) Si no encuentra ningun registro ...

INSERT INTO Cliente VALUES(SEQ_IDCLIENTE.NEXTVAL,p_nombre,p_apaterno,
p_amaterno,p_email,p_estado,p_ciudad,p_pwd);


SELECT SEQ_IDCLIENTE.CURRVAL INTO p_idCliente FROM dual; //SEQ_IDCLIENTE.CURRVAL es un objeto de oracle que crea una, secuencia de mumeros, su uso tine ciertas restricciones,dual es umna tabla auxiliar de oracle que se crea temporalmente.

COMMIT;

END INSERTA_CLIENTE;

Finalmente el procedimiento devuelve un valor de salida llamado p_idCliente