У меня есть таблица emp с полями id, name, salary, dept. Я хочу создать процедуру для вставки записей в эту таблицу emp.
В этой процедуре только одна строка является параметром.
string = 1 $ shubham $ 1000 $ comp # 2 $ vijay $ 5000 $civil # 33 $ ram $ 23456 $ mech # ......
затем в таблицу emp вставьте записи типа id |имя |зарплата |dept 1 shubham 1000 comp 2 vijay 5000 civil 33 ram 23456 mech
Строка разделена '#', любое значение столбца разделено '$', и если данные записи уже присутствуют, обновите эти записи на основе empID, т. Е. Emp ID - это первичный ключ в этой таблице.
Приведенная ниже процедура не показала мне правильный вывод.
create or replace procedure proc_one_stack_DUP ( string_in in varchar2 )
IS
limit_a varchar2(1000);
v_id number(10);
v_name varchar2(1000);
v_salary varchar2(1000);
v_dept varchar2(1000);
v_one varchar2(100);
pos_id number(10);
pos_name number(10);
pos_salary number(10);
pos_dept number(10);
counter number(10);
string_1 varchar2(1000);
len_all number(10);
len_copy number(10);
a1 number(10);
begin
len_copy:=0;
pos_id := 1;
counter := 0;
len_all:=length(string_in);
limit_a := REGEXP_COUNT (string_in, '#');
for i in 1..limit_a
loop
string_1 := substr(string_in,counter+1,INSTR (string_in,'#')-1);
a1 := length(string_1);
--for k in 1..1
--loop
v_id := substr(string_1,pos_id,INSTR (string_1,'$')-1);
pos_id := length(v_id);
v_name := substr(string_1,pos_id+2,INSTR (string_1,'$',1,2)-pos_id-1-1);
pos_name := length(v_name);
v_salary := substr(string_1,pos_name+pos_id+3,INSTR (string_1,'$',1,3)-pos_name-pos_id-1-2);
pos_salary := length(v_salary);
v_dept := substr(string_1,pos_salary+pos_id+pos_name+4,INSTR (string_1,'#')-pos_name-pos_id-pos_salary-1-3); -- INSTR (string_1,'#')-1
pos_dept := length(v_dept);
insert into emp values (v_id,v_name,v_salary,v_dept);
commit;
--end loop;
counter := counter+a1+1;
end loop;
end;