create or replace procedure print_insert(v_tname varchar2,v_cbatch number default 0)
/*
v_tname 要输出sql的表名 作者zh2000@hotmail.com
v_cbatch 输出commit间隔 博客:http://blog.itpub.net/xzh2000
*/
as
/* 声明动态游标变量 */
type cur_alldata is ref cursor;
l_alldata cur_alldata;
/* 将单行数据写入v_row*/
v_sql varchar2(3999);
v_row varchar2(3999);
/* 函数的前向声明 */
function formatfield(v_tname varchar2,v_cname varchar2,v_colno number) return varchar2;
/* 格式化数据输出 */
function formatdata(v_tname varchar2,v_row varchar2) return varchar2
as
v_ldata varchar2(32765);
v_rdata varchar2(32765);
v_cname varchar2(3999);
v_instr number(10);
v_count number(6);
begin
v_instr := instr(v_row,'(');
v_ldata := substr(v_row,1,v_instr);
v_rdata := substr(v_row,v_instr+1);
v_instr := instr(v_rdata,')');
v_rdata := substr(v_rdata,1,v_instr-1);
v_count := 0;
loop
v_instr := instr(v_rdata,',');
exit when v_instr = 0;
v_cname := substr(v_rdata,1,v_instr-1);
v_rdata := substr(v_rdata,v_instr+1);
v_count := v_count + 1;
/* 格式化不同的数据类型 */
v_cname := formatfield(v_tname,v_cname,v_count);
/* 将处理后的字段值加入v_ldata */
if v_count = 1 then
v_ldata := v_ldata||v_cname;
else
v_ldata := v_ldata||','||v_cname;
end if;
end loop;
/* 添加最后一个字段的值 */
if v_count = 1 then
v_ldata := v_ldata||formatfield(v_tname,v_rdata,v_count+1)||');';
else
v_ldata := v_ldata||','||formatfield(v_tname,v_rdata,v_count+1)||');';
end if;
return v_ldata;
end;
/* 针对不同的数据类型进行处理 */
function formatfield(v_tname varchar2,v_cname varchar2,v_colno number) return varchar2
as
v_name varchar2(3999);
v_type varchar2(99);
begin
select coltype into v_type from col where tname = upper(v_tname) and colno = v_colno;
if v_type = 'DATE' then
v_name := 'to_date('||''''||v_cname||''''||','||''''||'yyyy-mm-dd hh24:mi:ss'||''''||')';
elsif v_type = 'VARCHAR2' then
v_name := ''''||v_cname||'''';
else
v_name := v_cname;
end if;
return v_name;
end;
/* 求输入表的字段列表 */
function getfields(v_tname varchar2) return varchar2
as
v_fields varchar2(3999);
begin
for cur_fname in (select cname,coltype from col where tname = upper(v_tname) order by colno) loop
if v_fields is null then
v_fields := 'nvl('||cur_fname.cname||','||''''||'0'||''''||')';
else
v_fields := v_fields||'||'',''||'||'nvl('||cur_fname.cname||','||''''||'0'||''''||')';
end if;
end loop;
v_fields := 'select '||''''||'insert into '||v_tname||' values('||''''||'||'||v_fields||'||'||''''||')'||''''||' from '||v_tname;
return v_fields;
end;
begin
execute immediate 'alter session set nls_date_format='||''''||'yyyy-mm-dd hh24:mi:ss'||'''';
dbms_output.put_line(' *** xzxh2000向你问好! *** ');
v_sql := getfields(v_tname);
--dbms_output.put_line(v_sql);
open l_alldata for v_sql;
loop
fetch l_alldata into v_row;
exit when l_alldata%notfound;
--dbms_output.put_line(v_row);
dbms_output.put_line(formatdata(v_tname,v_row));
if mod(l_alldata%rowcount,v_cbatch) = 0 then
dbms_output.put_line('commit;');
end if;
end loop;
close l_alldata;
end;
分享到:
相关推荐
在数据库管理中,有时我们需要将数据从一个环境迁移到另一个环境,或者备份某些表的数据,这时“Oracle导出INSERT语句”的工具就显得非常实用。 这个小工具的核心功能是将Oracle数据库中的数据转换为一系列的INSERT...
在日常数据库管理和开发过程中,有时我们需要将Oracle数据库中的数据导出为INSERT语句,以便在其他环境或者备份恢复时使用。"Oracle导出INSERT语句V1.1"是一个专门为此目的设计的实用工具。 这个工具的主要功能是...
而将Oracle中的数据导出到Excel文件,可以帮助用户更方便地进行数据查看、分析和共享。这里我们将探讨如何通过脚本或批处理工具实现这一过程,无需编程知识,下载后即可直接使用。 首先,Oracle提供了一种名为SQL*...
本文将详细介绍如何使用Oracle工具和脚本将数据导出为不同的文件格式,如CSV、DBF,并探讨FTP自动下载脚本的实现。 首先,让我们关注Oracle数据库到CSV的导出。CSV(Comma Separated Values)是一种通用的文件格式...
### Oracle定时导出脚本详解 #### 一、Oracle定时导出脚本基本结构与功能说明 在Linux环境下,为了实现Oracle数据库的自动化备份管理,通常会借助于shell脚本来完成定时导出任务。以下是一个典型的Oracle定时导出...
ORACLE INSERT INTO SELECT *FROM 分批提交例子
在许多场景下,我们需要将Oracle数据库中的数据导出到Excel(XLS)文件,以便进行数据分析、报告生成或与非Oracle系统的数据交换。本篇文章将详细讲解如何编写一个Oracle脚本来实现这个功能。 首先,让我们了解...
本文将详细讨论如何将数据库中的数据导出为INSERT语句,以便于在需要时能够快速地将这些数据重新插入到数据库中。 首先,我们要理解什么是INSERT语句。在SQL语言中,INSERT语句用于向表中插入新的记录。基本语法...
/*oracle jobs 导出为执行脚本 <br> 就是把all_jobs或dba_jobs,导成DBMS_JOB.SUBMIT可以插入job的格式 其中all_jobs是当前用户的job,dba_jobs则是全部 下面只是随便整理了下,可以按照个人需要修改 ...
在这个场景中,我们需要创建一个BAT脚本来实现从Oracle数据库定时导出数据,并通过FTP将这些数据上传到远程服务器。 首先,我们需要了解Oracle数据库的基本操作。Oracle提供了多种数据导出工具,如SQL*Plus的`spool...
本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用。 首先,让我们分析给出的`backup.sh`脚本: ```bash su - oracle -c " exp cg23/sa tables=exp_table1,exp_table2 file=/home/oracle/...
本文将详细讲解如何在Excel文件中批量生成INSERT语句,以便快速地将数据导入到数据库中。 首先,我们需要了解INSERT语句的基本结构。INSERT语句用于向数据库表中插入新的记录,其基本语法如下: ```sql INSERT ...
在数据库维护和迁移过程中,有时我们需要将Oracle数据库中的数据转换为SQL INSERT语句,以便在其他环境中重新插入这些数据。"Oracle导出INSERT语句V1.1.1"就是这样一个实用工具,它能帮助我们自动化这个过程。 该...
功能介绍: 1、备份sql数据库,所有对象脚本。 2、能够批量导出sql库中需要的一些小表数据。...5.能够批量导出oracle用户下的重要的小表数据。 6.如果有用户下载此软件,可以通过QQ : 8767452 索取注册码。
exp 命令用于将 Oracle 数据库数据导出到文件中,而 imp 命令用于将数据从文件中导入到 Oracle 数据库中。这些命令可以在命令行中使用,例如,在 Windows 中,可以打开命令行窗口,输入 exp 用户名/密码@标识 file=d...
某些原因,删了一些自己用的函数,此包是我每次导数据老是用工具,如果要导特定几张表的话,如果用工具导入每次都找的够呛,所以花了一点时间写了此过程,如果发现问题或好的建议可以给我留言或者邮箱myrocket_2003@...
这里介绍的"Oracle 导出数据字典的小工具"是一个实用程序,能够帮助用户将数据字典信息导出为Word格式,方便查看和共享。 首先,数据字典在Oracle中的主要组成部分包括以下几类: 1. **V$视图**:这是Oracle提供的...
在给定的标题"生成SQL insert数据脚本更新"中,我们关注的核心是SQL语句的创建,特别是用于插入数据的INSERT语句。这样的脚本通常用于从一个数据库复制数据到另一个数据库,或者在数据库备份和恢复过程中使用。这里...
oracle导出excel的数据字典sql,根据该sql可以导出数据字典。