DECLARE 
v_sql   VARCHAR2(4000);
v_cnt   INTEGER;
TYPE col_type IS TABLE OF col%ROWTYPE INDEX BY BINARY_INTEGER;
v_col col_type;
CURSOR cour IS SELECT *   FROM  col WHERE tname=upper('execlog');
BEGIN    
    OPEN cour;
    FETCH cour BULK COLLECT INTO v_col;
    CLOSE cour;
    FOR i IN 1..v_col.COUNT LOOP
    v_sql:='update execlog set '||v_col(i).cname||'=''NULL'' where '||v_col(i).cname||' is null';
    EXECUTE IMMEDIATE v_sql;
    COMMIT;
    dbms_output.put_line(v_sql);
    END LOOP;    
END;

解决方案 »

  1.   

    eagle81(广广) 
    你的代码不行 而且写错了
    DECLARE 
    v_sql   VARCHAR2(4000);
    v_cnt   INTEGER;
    TYPE col_type IS TABLE OF col%ROWTYPE INDEX BY BINARY_INTEGER;
    v_col col_type;
    CURSOR cour IS SELECT *   FROM  col WHERE tname=upper('teacher');
    BEGIN    
        OPEN cour;
    FOR i IN 1..v_col.COUNT LOOP
        FETCH cour BULK COLLECT INTO v_col;
        v_sql:='update teacher set '||v_col(i).cname||'=''NULL'' where '||v_col(i).cname||' is null';
        EXECUTE IMMEDIATE v_sql;
        COMMIT;
        dbms_output.put_line(v_col(i).cname);
        END LOOP;   
    CLOSE cour; 
    END;
      

  2.   

    set :2=''NULL''  应该是SET :2=NULL