略微复杂,需要存储过程实现。
成都创新互联公司长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为青羊企业提供专业的成都网站制作、成都做网站、外贸营销网站建设,青羊网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
1、创建输出路径,比如你要在d盘test目录下输出,你就先在d盘根目录下建立一个test的目录。
2、sqlplus下以sysdba登录,执行以下语句
create or replace directory TMP as 'd:\test';
grant read,write on directory TMP to scott; --比如我用的scott用户
alter system set utl_file_dir='d:\test' scope=spfile;
3、以上步骤执行完,需要重启数据库。
4、创建一个存储过程,代码如下(基本是不用改动,原封复制即可):
CREATE OR REPLACE PROCEDURE SP_OUTPUT_PROCEDURE is
file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
v_name varchar2(50);
v_text varchar2(2000);
cursor cur_procedure_name is
select distinct name from user_source where type = 'PROCEDURE';
cursor cur_sp_out is
select t.text
from (select 0 line, 'CREATE OR REPLACE ' text
from dual
union
select line, text
from user_source
where type = 'PROCEDURE'
and name = v_name) t
order by line;
begin
open cur_procedure_name;
loop
fetch cur_procedure_name
into v_name;
exit when cur_procedure_name%notfound;
write_file_name := v_name || '.txt';
open cur_sp_out;
loop
fetch cur_sp_out
into v_text;
exit when cur_sp_out%notfound;
file_handle := utl_file.fopen('TMP', write_file_name, 'a');
write_content := v_text;
--write file
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle, write_content);
END IF;
--close file
utl_file.fclose(file_handle);
end loop;
close cur_sp_out;
end loop;
close cur_procedure_name;
end;
5、创建完毕执行存储过程,这个就不赘述了,执行完毕后,你会发现d盘test目录下的文件名就是以存储过程名命名的txt文件,如图:
6、里边内容(就是存储过程创建时的代码,可能排版看着难看点,但是不影响使用):
打开oracle sql developer工具,连接上数据库服务,然后打开表列表,选择需要导出的表,然后右击选择导出
请点击输入图片描述
在导出向导页面,如图可以看到,是否需要导出DLL,是否美化显示等选项,可以根据需要进行勾选。最下面选择编码和导出的文件目录
请点击输入图片描述
这一步,需要选择导出的列字段,可以选择其中部分字段,默认是全部列勾选的,如果不需要修改可以直接点击下一步
请点击输入图片描述
这一步需要指定过滤的where条件,如图所示,在where字句中输入条件,输入完条件之后可以点击刷新按钮查看过滤效果
请点击输入图片描述
到这一步是导出概要,可以查看导出有关的信息等,没有问题的话,可以直接点击完成,即可开始导出数据了。
请点击输入图片描述
如果表里的数据量比较大,在导出的时候需要等待一段时间,可以选择后台运行,这样可以同时做其它的操作。导出程序在后台导出,完成之后会有提醒。
请点击输入图片描述
导出完成之后,打开刚刚设置的导出文件目录,查看导出的文件和数据是否正确。
请点击输入图片描述
1、要想连接到一个数据库,先得配置一个tnsnames.ora文件。路径位于 【XX】/NETWORK/ADMIN/tnsnames.ora。【XX】视具体情况而定。
截图中红框标记的地方需要改成你需要连接的数据库的信息。
2、测试数据库是否能连通。
运行CMD,命令行执行:sqlplus 用户名/密码@数据库。
3、编写导出存储过程的脚本,保存为E:\export.sql。大概如下(标红框的地方替换成要保存脚本的路径和需要导出的存储过程列表):
SET echo off ;
SET heading off ;
SET feedback off ;
SPOOL 'C:/EXP/DDL/PRC_JG_JGTZ.SQL' replace
SELECT CASE
WHEN LINE = 1 THEN
'CREATE OR REPLACE ' || TEXT
WHEN LINE = MAX_LINE THEN
TEXT || CHR(10 ) || '/'
ELSE
TEXT
END
FROM USER_SOURCE A
LEFT JOIN (SELECT A.NAME,A.TYPE, MAX(LINE) MAX_LINE
FROM USER_SOURCE A
WHERE TYPE in ( 'PROCEDURE', 'PACKAGE' ,'PACKAGE BODY' )
GROUP BY A.NAME,A.TYPE ) B ON A.NAME||A.TYPE = B.NAME||B.TYPE
WHERE A.TYPE in ('PROCEDURE' , 'PACKAGE', 'PACKAGE BODY' ) AND A.NAME IN
(
'ETL_FACT_JG_SAEINDEX_SCALE'
,'ETL_FACT_JG_SAEINDEX_SCALE_OLD'
,'ETL_DM_JG_CIRC'
)
ORDER BY a.NAME||a.TYPE , LINE;
SPOOL OFF
4、执行刚刚编写的脚本文件,导出指定的存储过程。
连接数据库后,输入:@E:\export.sql
如果遇到了截图中出现的问题,请参照文章结尾的【注意事项】。
5、若要在新的数据库上创建导出的存储过程,只需连上新的数据,然后执行刚生成的脚本文件即可。
连接数据库后输入:@C:\exp\ddl\PRC_JG_JGTZ.SQL
注意事项
若出现乱码,可能需要将编写的sql文件转换为utf-8格式。
若提示无法创建spool文件,请确保目录C:/EXP/DDL存在,或者指定新的路径。