create or replace PROCEDURE LINEAS_ABC
(
P_OP IN NUMBER
, P_VALIDO OUT NUMBER
, P_ERROR OUT VARCHAR2
, P_LINEA_ID IN OUT NUMBER
, P_NOMBRE IN OUT VARCHAR2
) AS
BEGIN
--LIMPIANDO Y validando
p_nombre:= upper(trim(p_nombre));
if P_OP=1 then
p_linea_id:= sec_lineas.nextval;
insert into lineas(linea_id,nombre)values
(p_linea_id,p_nombre);
end if;
if P_OP=2 then--ACTUALIZANDO
update lineas set nombre=p_nombre where linea_id=p_linea_id;
end if;
if P_OP=3 then--BORRANDO
delete from lineas where linea_id=p_linea_id;
end if;
p_valido:=1;
exception
when others then
p_valido:=0;
p_error :='Ocurrió un error '||sqlcode||' '||sqlerrm;
END LINEAS_ABC;
Los cambios fueron:
1. Todos los parámetros correspondientes a la tabla deben ser de tipo out.
2. Después del begin se agrego la sección de limpieza y validación, un ejemplo de validación:
if p_precio <0 then
p_valido:=0;
p_error:='Precio no válido';
return;
end if;
3. Se modificó el update para no cambiar la llave primaria, todos los demás campos si pueden cambiar.
4. En el insert se agrego el uso de una secuencia, en este ejemplo sec_lineas, hay que crear una secuencia por cada tabla.
5. Se agregó la sección Exception para el manejo de excepciones o errores.