我是PLSQL的初学着。 现在项目有下面的要求, 大家帮我看看把。外面的程序会给存储过程传递一个EmployeeId字符串: "001,002,003,004". 我需要在Oracle中得到这个接受这个字符串。 并把这些Employee的表里删除。 用程序的语言就是, 我要把这个字符串分解成数组。 然后遍历数组删除表里的记录。请大家帮帮阿。 在线等。谢谢了。
调试欢乐多
RETURN NUMBER IS
BEGIN
DECLARE
第一个逗号前的数据
int v_Spot1:=INSTR(p_employee_id,',',1,1);
strUserid:=SUBSTR(p_employee_id,1,v_Spot1-1);
第2个逗号前的数据
int v_Spot2:=INSTR(p_employee_id,',',1,2);
strPlaystart:=SUBSTR(p_employee_id,v_Spot1+1,v_Spot2-v_Spot1-1);
...
BEGIN
DELETE FROM EMPLOYEE WHERE EMPLOYEEID=v_Spot1;
DELETE FROM EMPLOYEE WHERE EMPLOYEEID=v_Spot2;
...
EXCEPTION
WHEN OTHERS THEN
RETURN -1;
END;
RETURN 1;
END DEL_EMPLOYEE;有现成的贴了一个,自已写成循环再改进一下吧.
v_dmp_empnum varchar2(30) := null;
v_empnums varchar2(300) := null;
begin
dbms_output.enable(20000);
v_empnums := p_empnums || ',';
<<continuee>>
if instr(v_empnums, ',') = 0 then
v_dmp_empnum := v_empnums;
else
v_dmp_empnum := substr(v_dmp_empnum, 1, instr(v_empnums, ',', 1) - 1);
end if;
v_empnums := substr(v_empnums,
instr(v_empnums, ',', 1) + 1,
length(v_empnums));
--dbms_output.put_line(v_empnums||'-');
delete employee where empnum=v_dmp_empnum;
if v_empnums <> ',' then
goto continuee;
end if;
commit;
--'001,002,003,004'
end;
/sql>set serveroutput on
sql>exec mytest('001,002,003,004');
v_dmp_empnum := v_empnums;
]
delete from Employee
where instr('001,002,003,004'||',',EmployeeId||',')>0;
v_Sql varchar2(8000);
begin
v_Sql := 'delete emplyee where employeeid in ('||p_empnums||')';
execute immediate v_Sql;
commit;
exception when others then
begin
rollback;
dbms_output.put_line('执行过程出错!出错描述如下:'+chr(10)+AErrors);
end;
end;
(我也初学,不过试了一下,好像 oracle 里也有 in 的语法)
还使用delete from Employee
where instr('001,002,003,004'||',',EmployeeId||',')>0;