在Oracle中,使用PL/SQL编写存储过程是一种常用手法。也经常会遇到文件读写的问题,Oracle的PL/SQL可以对系统文件进行读写增删等操作,这里来给出我的做法。
首先,需要增加对系统文件的目录的读写权限,比如现在需要增加对“c:\temp”下目录的文件操作权限,当前操作用户名为TEST。首先定义一个文件目录的别名。
CREATE OR REPLACE DIRECTORY UTL_FILE_DIR AS 'c:\temp';
然后在管理员权限下给TEST用户增加操作目录的操作权限
GRANT READ, WRITE ON DIRECTORY UTL_FILE_DIR TO TEST WITH GRANT OPTION;
这样,当前用户下就有了对'c:\temp'目录的读写权限。
下面给出一个读文件的例子
G_FILE UTL_FILE.FILE_TYPE; G_LINE VARCHAR2(1600); G_FILEPATH VARCHAR2(20) := 'UTL_FILE_DIR'; --ファイルパス G_FILENAME VARCHAR2(20) := 'test.txt'; --ファイル名称 BEGIN
G_FILE := UTL_FILE.FOPEN(G_FILEPATH, G_FILENAME, 'R'); LOOP BEGIN --ファイルデータを取得する UTL_FILE.GET_LINE(G_FILE, G_LINE, 2000); DBMS_OUTPUT.PUT_LINE(LENGTHB(G_LINE)); EXCEPTION WHEN NO_DATA_FOUND THEN EXIT; END;
END LOOP; --ファイルをCLOSED UTL_FILE.FCLOSE(G_FILE);
END;
这样就可以对test.txt文件的读取操作,读写缓存是1023个字节,如果文件一行超过了1023个字节,则会文件读写错误。在Oracle9i以后在打开文件的时候多了一个参数,也就是文件读取缓存的参数,如下所示
G_FILE := UTL_FILE.FOPEN(G_FILEPATH, G_FILENAME, 'R', 3000);
这样,读写缓存就达到了3000,当文件超过3000行的话就会产生错误。在3000行
|