浏览 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 哪错了呢?谢谢大牛们了! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


