我是PLSQL的初学着。  现在项目有下面的要求, 大家帮我看看把。外面的程序会给存储过程传递一个EmployeeId字符串: "001,002,003,004". 我需要在Oracle中得到这个接受这个字符串。 并把这些Employee的表里删除。 用程序的语言就是, 我要把这个字符串分解成数组。 然后遍历数组删除表里的记录。请大家帮帮阿。 在线等。谢谢了。 

解决方案 »

  1.   

    CREATE FUNCTION DEL_EMPLOYEE(p_employee_id IN VARCHAR2)
    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;有现成的贴了一个,自已写成循环再改进一下吧.
      

  2.   

    create or replace procedure mytest(p_empnums varchar2) is
      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');
      

  3.   

    还是楼上写得细致,不过我想问一下,加了这个之后[ v_empnums   :=   p_empnums   ¦ ¦   ','; ],下面这行是不是就没用了  [if   instr(v_empnums,   ',')   =   0   then 
            v_dmp_empnum   :=   v_empnums; 
    ]
      

  4.   


    delete from Employee
    where instr('001,002,003,004'||',',EmployeeId||',')>0;
      

  5.   

    create   or   replace   procedure   mytest(p_empnums   varchar2)   is 
        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;
      

  6.   

    为什么不能像SQL那样 比如:delete from arc_user where id in ('6','7','8')
    (我也初学,不过试了一下,好像 oracle 里也有 in 的语法)
      

  7.   

    id是连在一起的 ,上面的这种方法认为拆分了
    还使用delete from Employee
    where instr('001,002,003,004'||',',EmployeeId||',')>0;