在sqlplus中执行下面的程序
--查询当前用户下的所有空表,并生成空表的插入语句脚本
create or replace
procedure generate_tab_segement is
v_table NVARCHAR2(200);
v_sql VARCHAR2(200);
v_q NUMBER;
v_char_value NVARCHAR2(10);
v_varchar2_value NVARCHAR2(10);
v_number_value NVARCHAR2(10);
v_date_value NVARCHAR2(10);
v_add_value NVARCHAR2(10);
v_separate_value NVARCHAR2(10);
v_insert_sql NVARCHAR2(4000);
col_num NVARCHAR2(200);
tb_name NVARCHAR2(200);
TYPE TCUR IS REF CURSOR;
c2 TCUR;
begin
FOR r1 IN (SELECT table_name tn FROM tabs) LOOP
BEGIN
v_table :=r1.tn;
v_sql := 'SELECT count(*) as q FROM ' || v_table || ' where rownum = 1';
v_char_value := '''1''';
v_varchar2_value := '''1''';
v_number_value := '1';
v_date_value := 'sysdate';
v_separate_value := ',';
v_insert_sql := 'insert into ';
v_add_value :='null';
OPEN c2 FOR v_sql ;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
IF v_q = 0 THEN
--DBMS_OUTPUT.PUT_LINE(v_table);
--构造插入行
FOR user_null_table IN (select to_char(count(*)) as col_num,
t.TABLE_NAME as tb_name
from user_tab_columns t
where t.TABLE_NAME= v_table
group by t.TABLE_NAME) LOOP
BEGIN
col_num := user_null_table.col_num;
tb_name := user_null_table.tb_name;
v_insert_sql := 'insert into ';
v_insert_sql := v_insert_sql || tb_name || ' values(' ;
FOR user_tab_cols IN (select * from user_tab_columns t where t.TABLE_NAME = tb_name ORDER BY t.COLUMN_ID) LOOP
BEGIN
v_add_value :='null';
IF user_tab_cols.COLUMN_ID = col_num THEN
v_separate_value := '';
else
v_separate_value := ',';
END IF;
if user_tab_cols.DATA_TYPE = 'CHAR' THEN
v_add_value := v_char_value;
END if;
IF user_tab_cols.DATA_TYPE = 'VARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NVARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NUMBER' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'LONG' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'DATE' THEN
v_add_value := v_date_value;
END IF;
IF substr(user_tab_cols.DATA_TYPE,0,9) = 'TIMESTAMP' THEN
v_add_value := v_date_value;
END IF;
v_insert_sql := v_insert_sql || v_add_value ||
v_separate_value;
end;
END LOOP;
v_insert_sql := v_insert_sql || ');';
DBMS_OUTPUT.PUT_LINE(v_insert_sql);
end;
END LOOP;
end if;
END LOOP;
CLOSE c2;
end;
END LOOP;
end generate_tab_segement;
/