利用存储过程将表中数据导出到

本文介绍如何在Oracle环境下,通过存储过程导出指定表的数据到文本文件,包括创建目录、授权操作和执行导出过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--*********************************************************************
--***
--***首先以dba或者是其他具有create directory的用户创建directory,然后授权
--***
--*********************************************************************
CREATE OR REPLACE DIRECTORY dir_jiang AS 'd:\oracle';
GRANT READ,WRITE ON directory dir_jiang TO scott;

--*********************************************************************
--***
--***执行导出文本文件的存储过程:p_exp
--***p_tname:要导出的表明;p_query:where条件,根据这个条件导出,如果为null,则全表导出
--***
--***
--*********************************************************************
CREATE OR REPLACE procedure p_exp(p_tname varchar2,p_query varchar2)
AS
v_line varchar2(2000); --记录的数据
v_sql varchar2(2000); --动态sql变量
v_fname varchar2(40); --导出数据的文件名字
cursor cursor_column --游标:通过数据字典查找出表有哪些字段
IS SELECT column_name,data_type
FROM user_tab_columns WHERE table_name=upper(p_tname);
type type_cursor IS ref cursor ;
mycursor type_cursor;
outf utl_file.file_type;

BEGIN
v_fname:=p_tname||'.txt';
FOR col IN cursor_column loop
IF col.data_type='DATE' THEN
v_sql:=v_sql||'to_char('||col.column_name||',''yyyy-mm-dd-hh24:mi:ss'')'||'||chr(9)||';
ELSE
v_sql:=v_sql||col.column_name||'||chr(9)||';
END IF;
END loop;
v_sql:=rtrim(v_sql,'||chr(9)||');
v_sql:='select '||v_sql||' from '||p_tname||' '||p_query;
dbms_output.put_line(v_sql);
outf:=utl_file.fopen('DIR_JIANG',v_fname,'w');
open mycursor FOR v_sql;
loop
fetch mycursor INTO v_line;
exit when mycursor%notfound;
utl_file.put_line(outf,v_line);
END loop;
utl_file.fclose(outf);
dbms_output.put_line('导出成功');
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值