oracle导出exp rows,ORACLEEXPIMP导入导出数据解决如何导出空表

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

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值