|
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;
/
|