论坛首页 综合技术版 Database

请教oracle9i中用存储过程将表中数据写入文件的问题

浏览 159 次
该帖已经被评为隐藏帖
作者 正文
最后更新时间:2008-03-28
目前项目中有个需求,需要每天指定时间从数据库中某个表中提取数据写入到指定的机器的指定目录下,大概思路如下:写个触发器,到指定时间执行某个存储过程来进行操作。试着google了一下,发现大概可以实现,于是试着写了下。
  按照文章所说,先指定了个directory,然后将读写权限赋给某个DBA,如下:
  create or replace directory dire as 'D:\test';
  grant read,write on directory dire to bcg;
  查询一下,select * from dba_directories; 发现已存在表中。
 
  建立虚拟数据,如下:
create table emp
(
id number(4) primary key,
username varchar(20)
);

create sequence my_seq
nocycle
maxvalue 1000
start with 1;

insert into emp values(my_seq.nextval, 'aaaa');
insert into emp values(my_seq.nextval, 'bbbb');
insert into emp values(my_seq.nextval, 'cccc');
insert into emp values(my_seq.nextval, 'dddd');
insert into emp values(my_seq.nextval, 'eeee');

select * from emp;

写相应的存储过程,内容如下:
CREATE OR REPLACE PROCEDURE P_WRITE_EMP AS
V_FILE UTL_FILE.FILE_TYPE;
V_BUFFER VARCHAR2(32767);
BEGIN
V_FILE := UTL_FILE.FOPEN('dire', 'EMP' || TO_CHAR(SYSDATE, 'YYYY_MM_DD') || '.csv', 'w', 32767);
V_BUFFER := 'id,username';
UTL_FILE.PUT_LINE(V_FILE, V_BUFFER);
FOR I IN
(
SELECT '"' || id || '","' ||
username || '"' RESULT
FROM EMP
) LOOP
UTL_FILE.PUT_LINE(V_FILE, I.RESULT);
END LOOP;
UTL_FILE.FCLOSE(V_FILE);
END;

编译此存储过程,没报错。
但执行此存储过程,报错,信息如下:
ora-29280:目录路径无效
ora-06512:在"sys.utl_file",line 18
ora-06512:在"sys.utl_file",line 424
ora-06512:在"sys.p_write_emp",line 5
ora-06512:在line 3

哪错了呢?谢谢大牛们了!
   
论坛首页 综合技术版 Database

跳转论坛:
JavaEye推荐