Generate INSERT statements
My
OracleGuide

Generate INSERT statements

About    Feedback Products

This script builds insert statements for the existing data in the tables. One can run the generated script in sql*plus to repopulate the data.


SQL> var str refcursor

DECLARE
    v_table_name constant varchar2(100) := 'PGS_TABLES';
    flg boolean:=false;
    str1 varchar2(32000);
    str2 varchar2(32000);
    str3 varchar2(32000);
BEGIN
    for c1 in (select table_name from user_tables where table_name=v_table_name)
    loop
        flg:=true;
        str1:='select ''insert into '||c1.table_name||' (';
        for c2 in (select * from user_tab_columns where table_name=c1.table_name order by column_id)
        loop
            if  c2.column_id=1 then
                str1:=str1||'''||chr(10)||''';
            else
                str1:=str1||',''||chr(10)||''';
                str2:=str2||',''||chr(10)||''';
            end if;
            str1:=str1||c2.column_name;
            if  instr(c2.data_type,'CHAR') > 0 then
                str3:='''''''''||'||c2.column_name||'||''''''''';
            elsif instr(c2.data_type,'DATE') > 0 then
                str3:='''to_date(''''''||to_char('||c2.column_name||',''mm/dd/yyyy hh24:mi'')||'''''',''''mm/dd/yyyy hh24:mi'''')''';
            else
                str3:=c2.column_name;
            end if;
            str2:=str2||'''||decode('||c2.column_name||',Null,''Null'','||str3||')||''';
        end loop;
        str1:=str1||') values ('||str2||')'' str from '||c1.table_name;
    end loop;
if   flg then
    open :str for str1;
    LOOP
        fetch :str INTO str2;
        exit when :str%notfound;
        dbms_output.put_line(str2||';');
        dbms_output.put_line('--');
    END LOOP;
end if;
end;
/