oracle生成insert语句的存储过程怎么写

oracle表创建存储过程生成insert语句保存到文件中,求教这个存储过程要怎么写?就是对一张表创建一个存储过程,能生成出insert插入语句的,并且执行这个存储就可以... oracle表创建存储过程生成insert语句保存到文件中,求教这个存储过程要怎么写?
就是对一张表创建一个存储过程 ,能生成出insert插入语句的,并且执行这个存储就可以保存结果到一个文件中。以便我将数据插入到一个sql server中。
表的数据量还是比较大的,有几百万条。所以想到有存储过程先把数据拿出来。
表字段有二三十个,表名:JZ31.TCL_CUSTBASEINFO
简单点就好,没有复杂的判断。。
由于个人对存储过程不太了解,看了许多例子都比较复杂,写不出来自己想要的,求教各位达人了
展开
 我来答
sxdtgsh
2013-06-04 · TA获得超过2221个赞
知道小有建树答主
回答量:913
采纳率:75%
帮助的人:807万
展开全部

你可以用oracle的UTL_FILE包,直接将文件生成到服务器上。

下面给你个例子。测试环境windows2008 + oracle11g。

Blob,Clob类型不能导出,导出的文本适用于sqlserver.

create table Test_Gsh(
   aChar     varchar2(20),
   bNum    number,
   cDate     date);

insert into Test_Gsh(aChar, bNum, cDate)
select '这', 1, sysdate from dual
union all
select '是', 2, sysdate from dual
union all
select '测', 3, sysdate from dual
union all
select '试', 4, sysdate from dual
union all
select 'UTL_FILE', 5, sysdate from dual
union all
select '的', to_Number(null), Null from dual
union all
select '例子', to_Number(null), Null from dual;

--  建立目录
create directory UTL_FILE_GAO as 'c:\';
-- 建立过程
create or replace procedure out_File_Test as
  vFileName      varchar2(50);
  vFilePath         varchar2(30);
  out_file            utl_file.file_type;
  vBackupTime varchar2(30);
begin
  vBackupTime := to_Char(sysdate, 'yyyymmddhh24miss');
  dbms_output.put_line(vBackupTime);
  vFilePath := 'UTL_FILE_GAO';
  vFileName := 'Test_Gsh' || vBackupTime || '.sql';
  dbms_output.put_line(vFileName);
  out_file := utl_file.fopen(vFilePath,  vFileName,  'w');
  utl_file.put_line(out_file, '-- 备份表:Test_Gsh');
  utl_file.put_line(out_file, '-- 备份时间:' || vBackupTime);
  for r in (select 'insert into Test_Gsh(aChar, bNum, cDate) values (' || 
                            case when aChar is null then 'Null' else Chr(39) || aChar || Chr(39) end || ', ' ||
                            case when bNum is null then 'Null' else to_Char(bNum) end || ', ' ||
                            case when cDate is null then 'Null' else 'cast(' || Chr(39) || to_Char(cDate, 'yyyymmddhh24miss') || Chr(39) || ' as dateTime)'  end ||
                            ');' insData
                  from Test_Gsh) loop
     utl_file.put_line(out_file, r.InsData); 
  end loop;
  utl_file.FCLOSE(out_file);
exception
  when others then
     dbms_output.put_line(sqlerrm);
     utl_file.FCLOSE(out_file);
end;
/
百度网友13eda02
推荐于2017-09-13 · TA获得超过778个赞
知道小有建树答主
回答量:1048
采纳率:77%
帮助的人:384万
展开全部
其实SQL Developer、Toad、PL/SQL Developer都有导出为insert语句的SQL文件形式。
如果你非要自己写、其实就是select语句用||拼接字符串:
select 'insert into JZ31.TCL_CUSTBASEINFO(colStr,colNum)values('''||colStr||''','||colNum||')'

from JZ31.TCL_CUSTBASEINFO;
碰到日期字段还要拼好to_date函数。
更多追问追答
追问
项目是用定时任务做取数据,不是直接用工具取。
主要是我的数据量比较大,一查询就内存溢出了。。。
上面的是存储过程里的吗,其它部分要怎么写?
追答
只是思路啊、用什么方式最终都要查询拼凑Insert语句,
数据多的时候可以分页循环取,再spool到文件里。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式