File I/O: read operation


create or replace procedure ins_prod
(p_file varchar2) as
v_filehandle utl_file.file_type;
v_data varchar2(50);
v_delimiter1 number;
v_delimiter2 number;
v_prod_id varchar2(3);
v_product varchar2(20);
v_cost number(4,2);
v_vend_id varchar2(3);
begin
v_filehandle := utl_file.fopen('/disk1/oracle/utl_files',p_file,'r');
loop
begin
utl_file.get_line(v_filehandle,v_data);
v_delimiter1 := instr(v_data,'/',1,1);
v_delimiter2 := instr(v_data,'/',1,2);
v_product := substr(v_data,1,v_delimiter1 - 1);
v_cost := substr(v_data,v_delimiter1 + 1,v_delimiter2 - v_delimiter1 - 1);
v_vend_id := substr(v_data,v_delimiter2 + 1);

select 'P'||to_char(max(to_number(substr(prod_id,2))) + 1)
into v_prod_id from products;

dbms_output.put_line(v_product||' '||v_cost||' '||v_vend_id);

insert into products values
(v_prod_id, v_product, v_cost, v_vend_id);
exception
when no_data_found then exit;
end;
end loop;
end;
/