ITPub博客

首页 > 数据库 > 数据库开发技术 > 转贴:将表数据写成INSERT语句。

转贴:将表数据写成INSERT语句。

原创 数据库开发技术 作者:axman 时间:2005-03-17 14:14:55 0 删除 编辑
将表数据写成INSERT语句。转自:www.itpub.net[@more@]create or replace procedure tab_insert_sql( tname varchar2,rowCommit number default 1,filter varchar2 default null)
as
/***********************************************************
author:george.xiong@hotmail.com
date :2005-03-03
version:1.0.2
***********************************************************/
type cur_data is ref cursor;
c_dataCol cur_data;
c_dataRow cur_data;
dataRow varchar2(3999);
dataCol col%rowtype;
tmpSql varchar2(3999);
rltSql varchar2(3999);
cols varchar2(1000);
vals varchar2(1000);
notvalid varchar2(1000);
begin
DBMS_OUTPUT.ENABLE (200000);
tmpSql:='select * from col where tname='''||upper(tname)||'''';
rltSql:='select replace(replace( ''insert into '||tname||'( ';

open c_dataCol for tmpSql;
loop
fetch c_dataCol into dataCol;
exit when c_dataCol%notfound;

if dataCol.coltype ='DATE'
then
cols:=cols||','||dataCol.cname;
vals :=vals||','''||chr(124)||chr(124)||'''to_date('''''||''''||chr(124)||chr(124)||'nvl(to_char('||dataCol.cname||',''yyyy-mm-dd hh24:mi:ss'')'||',''nulldate'')'||chr(124)||chr(124)||''''''''||','||''''''||'yyyy-mm-dd hh24:mi:ss'||''''''||')'''||chr(124)||chr(124)||'''';
elsif dataCol.coltype in( 'VARCHAR2','VARCHAR','CHAR' ,'NVARCHAR2','NVARCHAR','NCHAR')
then
cols:=cols||','||dataCol.cname;
vals :=vals||','''||chr(124)||chr(124)||''''''''''||chr(124)||chr(124)||'nvl('||dataCol.cname||',''nullstr'')'||chr(124)||chr(124)||'''''''';
elsif dataCol.coltype in ('NUMBER','FLOAT')
then
cols:=cols||','||dataCol.cname;
vals :=vals||','''||chr(124)||chr(124)||'nvl(to_char('||dataCol.cname||'),''null'')'||chr(124)||chr(124)||'''';
else notvalid:=notvalid||' '||dataCol.cname ;
end if;
end loop;
close c_dataCol;

if notvalid is not null then
dbms_output.put_line('--'||tname||' can not export follow columns: '||notvalid);
end if;

if cols is null then
dbms_output.put_line('-- no data can export');
return ;
end if;

rltSql:=rltSql||substr(cols,2)||') values('||substr(vals,2)||''''||chr(124)||chr(124)||'''); '' '||' ,''''''nullstr'''''',''null''),''to_date(''''nulldate'''',''''yyyy-mm-dd hh24:mi:ss'''')'', ''null'') ' ||' from '|| tname;
if filter is not null then
rltSql:=rltSql||' where '||filter;
end if;

open c_dataRow for rltSql;
loop
fetch c_dataRow into dataRow;
exit when c_dataRow%notfound;
dbms_output.put_line(dataRow);
if mod(c_dataRow%rowcount,rowCommit) = 0 then
dbms_output.put_line('commit;');
end if;
end loop;
dbms_output.put_line('commit;');
close c_dataRow;

exception
when others then
dbms_output.put_line('-- export error ,plz check table name and filter');
end;

----------------------------------------------------------------------------------

运行以下语句即可
set serverout on

exec tab_insert_sql('emp');

exec tab_insert_sql('emp',10,'empno>7839');

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25498/viewspace-793113/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 转贴ora-04031
请登录后发表评论 登录
全部评论

注册时间:2011-09-17

  • 博文量
    28
  • 访问量
    630742