日期:2014-05-17  浏览次数:20791 次

大哥,大姐帮帮忙,小弟这里有个关于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;


你要哪一种的?