给一个字符串,'7788,5566,2233’员工编号,传入存储过程,删除这些员工记录,并给出这些员工删除的结果’true,false,true’删除成功true,否则false,以字符串形式返回。比如5566删除失败(原因可能是不存在该记录,判断依据用系统隐式游标的rowcount属性)注:要拆分传入的员工编号字符串为单个的员工编号。
这里员工编号以变量代替,具体解决方案入下
1.删除的存储过程
CREATE OR REPLACE PROCEDURE p_delete(ids VARCHAR,-- 要删除的ids
rs OUT VARCHAR) -- 删除的结果
IS
v_ids VARCHAR(50) :=ids;-- 赋值给变量,因为入参无法改变
v_id VARCHAR(5);-- 截取出的id
n NUMBER;-- 逗号的位置
BEGIN
LOOP
EXIT WHEN v_ids IS NULL;-- ids为null时退出循环
n:=INSTR(v_ids,',');-- 找逗号的位置
IF n=0 THEN -- 没有逗号
v_id:=v_ids;
v_ids:=NULL;-- ids变为null,标识着准备退出循环
ELSE
v_id:=SUBSTR(v_ids,1,n-1);-- 找逗号前的id
v_ids:=SUBSTR(v_ids,n+1);-- ids更改为剩下的id信息
END IF;
DELETE FROM emp WHERE empno=v_id;-- 删除记录
IF SQL%ROWCOUNT=1 THEN -- 判断结果
IF rs IS NULL THEN-- 拼接结果
rs:='true';
ELSE
rs:=rs||',true';
END IF;
ELSE
IF rs IS NULL THEN
rs:='false';
ELSE
rs:=rs||',false';
END IF;
END IF;
END LOOP;
END;
2.调用存储过程
-- Created on 2021/1/26 by WWW
declare
v_result VARCHAR2(50);
BEGIN
-- 删除id=1 id=2 id=3 结果为result1,result2,result3
p_delete('1,2,3',v_result);
COMMIT;
dbms_output.put_line('execute result:'||v_result);
end;