我要删除表中某个字段值不在数组中的元素,请问sql语句怎么写,谢谢
DNS 是一个字符串数组
DNS.EXTEND;
DNS(1):='yy';
v_SQL:='DELETE FROM USER_INFO WHERE USER_DN NOT IN :1';
EXECUTE IMMEDIATE v_SQL USING DNS;

解决方案 »

  1.   

    最好把数组化为表,通过关联查询到delete语句里
      

  2.   

    declare 
    type array_type is varray(20) of varchar2(100);
    a array_type :=array_type('1','2','3','4','5');
    v_str varchar2(100);
    v_sql varchar2(1000);
    begin
         for i in 1..a.count loop
             v_str := v_str||''''||a(i)||''',';
         end loop;
         dbms_output.put_line('v_str='||v_str);
         v_sql := 'DELETE FROM USER_INFO WHERE USER_DN NOT IN('||substr(v_str,1,length(v_str)-1)||')';
         dbms_output.put_line('v_sql='||v_sql);
         execute immediate v_sql; 
    end;