【发布时间】:2019-10-25 04:25:49
【问题描述】:
我有一个表 emp,其中的字段是 id、name、salary、dept。 我想创建一个在该 emp 表中插入记录的过程。
在该过程中,只有一个字符串是参数。
字符串 = 1$shubham$1000$comp#2$vijay$5000$civil#33$ram$23456$mech#......
然后在 emp 表中插入记录,例如 编号 |姓名 |工资 |部门 1 个舒巴姆 1000 比赛 2 维杰 5000 民用 33 ram 23456 机甲
行由'#'分隔,任何列值都由'$'分隔,并且 如果给定的记录已经存在,则根据 emp ID 更新该记录,即 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;
【问题讨论】: