oracle儲存過程

2021-10-08 09:21:10 字數 4517 閱讀 9298

今天在工作中看到了乙個oracle的儲存過程,公司電腦突然不能遠端了,只好明天再放上來了。

這個方法是oracle提供的檔案操作包:utl_file 中的乙個方法,其作用是開啟乙個檔案。

utl_file.fopen(location in varchar2, filename in varchar2, open_mode in varchar2,max_linesize in binary_integer)

return file_type;

其中的location並不能簡單的指定為』d:/temp』等路徑,要建立乙個directory變數並賦給許可權(必須以dba身份登入):

create

orreplace directory d_output as

'd:/temp'

;grant

read

,write

on directory d_output to testdb;

grant

execute

on utl_file to testdb;

就可以在資料庫伺服器的相應路徑下建立該檔案了。

開啟檔案時注意以下幾點:

utl_file.is_open 用法

如果檔案控制代碼指定的檔案已開啟,返回true,否則false

function utl_file.is_open (

file

in utl_file.file_type)

return

boolean

;

utl_file只提供乙個方法去讀取資料:get_line

utl_file.get_line 用法

讀取指定檔案的一行到提供的快取。

procedure utl_file.get_line (

file

in utl_file.file_type, buffer out varchar2)

;

utl_file.put 用法

在當前行輸出資料

procedure utl_file.put (

file

in utl_file.file_type, buffer out varchar2)

;

utl_file.put輸出資料時不會附加行終止符。

utl_file.put會產生以下異常

utl_file.invalid_filehandle

utl_file.invalid_operation

utl_file.write_error

utl_file.new_line

在當前位置輸出新行或行終止符,必須使用new_line來結束當前行,或者使用put_line輸出帶有行終止符的完整行資料。

procedure utl_file.new_line (

file

in utl_file.file_type,

lines

innatural :=1)

;

如果要在utl_file.put後立刻換行,可以如下例所示:

procedure add_line (file_in in utl_file.file_type, line_in in  varchar2)

isbegin

utl_file.put (file_in, line_in)

; utl_file.new_line (file_in)

;end

;

utl_file.put_line

輸出乙個字串以及乙個與系統有關的行終止符

procedure utl_file.put_line  (

file

in utl_file.file_type, buffer in varchar2)

;

在呼叫utl_file.put_line前,必須先開啟檔案。

utl_file.put_line會產生以下異常

utl_file.invalid_filehandle

utl_file.invalid_operation

utl_file.write_error

利用utl_file.put_line從表emp讀取資料到檔案,如下例所示:

procedure emp2file

is fileid utl_file.file_type;

begin

fileid := utl_file.fopen (

'/tmp'

,'emp.dat'

,'w');

/* quick and dirty construction here! */

for emprec in

(select

*from emp)

loop

utl_file.put_line

(to_char (emprec.empno)

||','

|| emprec.ename ||

','||..

. to_char (emprec.deptno));

endloop;

utl_file.fclose (fileid)

;end

;

put_line相當於put後加上new_line;也相當於putf的格式串"%s/n"。

utl_file.putf

以乙個模版樣式輸出至多5個字串,類似c中的printf

procedure utl_file.putf

(file

in file_type

,format in varchar2

,arg1 in varchar2 default

null

,arg2 in varchar2 default

null

,arg3 in varchar2 default

null

,arg4 in varchar2 default

null

,arg5 in varchar2 default

null

);

utl_file.fflush

確保所有資料寫入檔案。

procedure utl_file.fflush (

file

in utl_file.file_type)

;

作業系統可能會快取資料來提高效能。因此可能呼叫put後,開啟檔案卻看不到寫入的資料。在關閉檔案前要讀取資料的話可以使用utl_file.fflush。

典型的使用方法包括分析執行進度和除錯紀錄。

utl_file.fflush會產生以下異常

utl_file.invalid_filehandle

utl_file.invalid_operation

utl_file.write_error

utl_file.fclose

關閉檔案

procedure utl_file.fclose (

file

inout file_type)

;

注意:file是乙個in out引數,因為在關閉檔案後會設定為null

當試圖關閉檔案時有快取資料未寫入檔案,會丟擲write_error異常

utl_file.fclose會產生以下異常

utl_file.invalid_filehandle

utl_file.write_error

utl_file.fclose_all

關閉所有已開啟的檔案

procedure utl_file.fclose_all;
在結束程式時要確保所有開啟的檔案已關閉,可使用fclose_all

也可以在exception使用,當異常退出時,檔案也會被關閉。

exception

when others

then

utl_file.fclose_all;..

. other clean up activities ...

end;

注意:當使用fclose_all關閉所有檔案時,檔案控制代碼並不會標記為null,使用is_open會返回true。但是,那些關閉的檔案不能執行讀寫操作(除非你再次開啟檔案)。

utl_file.fclose_all會產生以下異常

utl_file.write_error

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

ORACLE儲存過程

自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...

Oracle 儲存過程

create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...