Oracle - ayuda con procedimientos

 
Vista:

ayuda con procedimientos

Publicado por Cristian (1 intervención) el 17/08/2008 19:24:00
hola por favor necesito ayuda con el siguiente procedimiento en oracle, mi problema es que me sale un error de que hay mas de un dato por campo y no se como insertar un loop para que esto no suceda

por favor ayuda es urgente..........................

create or replace
PROCEDURE P_ACTUALIZA_CLIENTE
( Pn_Cod_Cli IN NUMBER
, Pv_Nom_Cli IN VARCHAR2
, Pv_Mail_Cli IN VARCHAR2
, Pv_Dir_cli IN VARCHAR2
, Pv_Tel1_Cli IN VARCHAR2
, Pv_Tel2_Cli IN VARCHAR2
, Pv_Ciu_Cli IN VARCHAR2
, Pv_Prov_Cli IN VARCHAR2
, Pn_Cod_Pais in number
, Pv_Cod_Pos IN VARCHAR2
) AS
cont binary_integer := 1;
Lv_Cod_Cli number;
BEGIN
select cod_cliente
into lv_cod_cli
from clientes
where Cod_cliente = pn_Cod_Cli;
if pn_cod_cli = lv_cod_cli then
update clientes set nom_cliente = pv_nom_cli, mail_cliente = pv_mail_cli, dir_cliente= pv_dir_cli,
tel1_cliente = pv_tel1_cli, tel2_cliente = pv_tel2_cli, ciu_cliente = pv_ciu_cli,
prov_cliente = pv_prov_cli, cod_pais = pn_cod_pais, cod_postal_cliente = pv_cod_pos
where Cod_cliente = pn_cod_cli;
commit;
else
insert into clientes values (pn_cod_cli, pv_nom_cli, pv_mail_cli, pv_dir_cli, pv_tel1_cli,
pv_tel2_cli, pv_ciu_cli, pv_prov_cli, pn_cod_pais,pv_cod_pos);
commit;
end if;
END P_ACTUALIZA_CLIENTE;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con procedimientos

Publicado por Rodolfo Reyes (59 intervenciones) el 19/08/2008 00:02:18
Supongo que te esta dando el error, en la parte donde haces un select para buscar el codigo del cliente, para ver si este existe en la tabla.

Pues lo que pasa es que deberias de hacer la busqueda en tu tabla por medio de tu llave primaria, para que unicamente te devuelva un registro.

Adicionalmente, tambien podrias modificar el select y hacer un

select count(cod_cliente)
into lv_cod_cli
from clientes
where Cod_cliente = pn_Cod_Cli;

Esto te puede devolver tres valores.

0: Quiere decir que el cliente no existe.
1: El cliente existe.
>1: Quiere decir que el codigo que estas buscando esta duplicado.

Entonces el if lo pordias dejar de mas o menos la siguiente manera:

if pn_cod_cli = 1 then

elsif pn_cod_cli = 0 then

else --Aqui deberias de hacer algo especial, porque es el caso cuando devuelve mas de un registro.

end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar