posts - 189,comments - 115,trackbacks - 0
          如何在ORACLE的PL/SQL中將數據寫入文件
          ?

          在數據庫的開發中,當PL/SQL語句很復雜的時候,我想寫一些Log,就像java的Log4j那樣。這樣就可以很好的跟蹤程序的運行情況。在網上找到的文章不是很好用,修改了一下。

          1:在Oracle服務器上建立一個目錄并指定權限(我這個是unix的。windows用c:\tmp之類的就行)

          CREATE DIRECTORY TEMP AS '/tmp';
          GRANT READ,WRITE ON DIRECTORY TEMP TO PUBLIC;
          GRANT?? EXECUTE? ON? SYS.UTL_FILE? TO? YOU_USER_NAME;

          如果出現權限錯誤的話,注意自己登陸的方式,我是用oralce用戶TelNet到Unix上的,然后connect / as sysdba。(windows 用戶應該是:sys用戶登錄到數據庫(ora9i):conn sys/password@oraclesid as sysdba ,sys用戶的缺省密碼和system一樣,都是manager

          2:寫Log文件的SQL語句如下:

          declare
          ? file_handle utl_file.file_type;
          ? buff varchar2(20);
          ? cursor c1 is select? acloumn from t_atable;
          begin
          ? file_handle := utl_file.fopen('TEMP',log.txt','w');
          ? open c1;
          ? loop
          ??? fetch c1 into buff;
          ??? exit when c1%notfound;
          ??? utl_file.put_line(file_handle,buff);
          ?? end loop;
          ?? close c1;
          ?? utl_file.fclose(file_handle);
          end;

          這樣,就應該可以了,file_handle := utl_file.fopen('TEMP',log.txt','w');中的'w'是指write,也可以是'a',append.

          封裝后是這樣的:

          procedure writeLog(logMessage in Varchar2) is
          ? begin
          ??? IF logSwitch THEN
          ????? file_handle := utl_file.fopen('TEMP','x.txt','w');
          ????? utl_file.put_line(file_handle,logMessage);
          ????? utl_file.fclose(file_handle);
          ??? END IF;
          ? end;

          其中logSwitch 是boolean型,我定義在包中的。如果直接用的話可以是procedure writeLog(logMessage in Varchar2, logSwitch in boolean )

          posted on 2006-03-25 20:34 MEYE 閱讀(1270) 評論(0)  編輯  收藏 所屬分類: NEWS
          主站蜘蛛池模板: 清水河县| 永平县| 岢岚县| 蓝山县| 巨鹿县| 安多县| 东丽区| 勃利县| 南乐县| 江川县| 托克托县| 霍邱县| 怀化市| 仁化县| 揭西县| 黄石市| 连山| 岑巩县| 西峡县| 浦东新区| 长阳| 揭东县| 隆化县| 邛崃市| 旅游| 麦盖提县| 林州市| 科尔| 区。| 柘荣县| 长葛市| 长寿区| 迭部县| 浙江省| 库尔勒市| 河东区| 康保县| 苗栗市| 图木舒克市| 蒙城县| 泌阳县|