大哥,大姐帮帮忙,小弟这里有个关于utl_file的问题。
我的sqlplus连的是服务器,执行服务器上的存储过程(把数据库数据导出到txt文件中),它生成的文件不在本机,却在服务器上。存储过程代码是:
create or replace function dump_csv( p_query in varchar2, //sql语句
p_separator in varchar2, //字段以什么间隔
p_dir in varchar2 , //地址
p_filename in varchar2 ) //导出的文件名
return number
AUTHID CURRENT_USER
is
l_output utl_file.file_type;
l_theCursor integer default dbms_sql.open_cursor;
l_columnValue varchar2(2000);
l_status integer;
l_colCnt number default 0;
l_separator varchar2(10) default '';
l_cnt number default 0;
begin
l_output := utl_file.fopen(p_dir, p_filename, 'w' );
dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
for i in 1 .. 255 loop
begin
dbms_sql.define_column( l_theCursor, i,
l_columnValue, 2000 );
l_colCnt := i;
exception
when others then
if ( sqlcode = -1007 ) then exit;
else
raise;
end if;
end;
end loop;
dbms_sql.define_column( l_theCursor, 1, l_columnValue,
2000 );
l_status := dbms_sql.execute(l_theCursor);
loop
exit when ( dbms_sql.fetch_rows(l_theCursor) <= 0 );
l_separator := '';
for i in 1 .. l_colCnt loop
dbms_sql.column_value( l_theCursor, i,
l_columnValue );
utl_file.put( l_output, l_separator ||
l_columnValue );
l_separator := p_separator;
end loop;
utl_file.new_line( l_output );
l_cnt := l_cnt+1;
end loop;
dbms_sql.close_cursor(l_theCursor);
utl_file.fclose( l_output );
return l_cnt;
end dump_csv;
大哥,大姐帮帮忙。小弟谢过了。
------解决方案-------------------- 你就等于把服务器上的数据直接写到客户端~ 代码不知道怎么实现,关注下
其实你可以先写到服务器端,然后写个ftp的脚本,把生成好的文本下载到本地
------解决方案-------------------- directory是建在服务器上,所以生产的文件也都是保存在服务器上。
------解决方案-------------------- 探讨 你就等于把服务器上的数据直接写到客户端~ 代码不知道怎么实现,关注下 其实你可以先写到服务器端,然后写个ftp的脚本,把生成好的文本下载到本地
------解决方案-------------------- DECLARE
V_FILE UTL_FILE.FILE_TYPE;
L_TXT VARCHAR2(32767);
BEGIN
--1.这种保存在服务器,参数1为虚拟路径。参数2保存文件名,参数3 覆盖
UTL_FILE.PUT_LINE(V_FILE, L_TXT);
V_FILE := UTL_FILE.FOPEN('CUX_FILE_PATH', 'TTTT.txt', 'w');
IF UTL_FILE.IS_OPEN(V_FILE) THEN
UTL_FILE.FCLOSE(V_FILE);
END IF;
--2.跑报表时,点击【查看输出】按钮 可以下载的。
Fnd_File.Put_Line(Fnd_File.Output,L_TXT);
END;
你要哪一种的?