將oracle SQL語句執行結果匯入文字檔案

2021-08-25 19:16:44 字數 3255 閱讀 4115

將oracle sql語句執行結果匯入文字檔案  

1 建立directory

create or replace directory dir

as 'd:\temp';

為使用者賦予該directory的許可權

grant all on directroy dir to public;

2 建立函式function

create or replace function tofile(p_query in varchar2,

p_separator in varchar2,

p_dir in varchar2,

p_filename in varchar2)

return number

is l_cursor integer default dbms_sql.open_cursor;

l_output utl_file.file_type;

l_columnvalue varchar2(2000);

l_status integer;

l_colcnt number default 0;

l_separator varchar2(10) default '';

l_cnt number default 0;

rec_tab dbms_sql.desc_tab;

col_num number;

begin

l_output := utl_file.fopen( p_dir,p_filename,'w' );

dbms_sql.parse( l_cursor ,p_query, dbms_sql.native );

/*寫入該sql查詢結果的列名,以空格隔開*/

dbms_sql.describe_columns(l_cursor,l_colcnt,rec_tab);

col_num := rec_tab.first;

if( col_num is not null) then

loop

utl_file.put( l_output , l_separator||rec_tab(col_num).col_name);

col_num := rec_tab.next(col_num);

l_separator :=' ';

exit when (col_num is null);

end loop;

end if;

utl_file.new_line( l_output );

/*寫入sql查詢結果的列值*/

for i in 1.. l_colcnt loop

dbms_sql.define_column( l_cursor , i,

l_columnvalue,2000);

end loop;

l_status :=dbms_sql.execute(l_cursor);

loop

exit when ( dbms_sql.fetch_rows( l_cursor ) <= 0 );

l_separator :='';

for i in 1 .. l_colcnt loop

dbms_sql.column_value( l_cursor ,i,

l_columnvalue);

utl_file.put( l_output , l_separator || l_columnvalue );

l_separator := p_separator;

end loop;

utl_file.new_line( l_output );

l_cnt := l_cnt+1;

end loop;

dbms_sql.close_cursor( l_cursor );

utl_file.fclose( l_output );

return l_cnt;

end tofile;

3 建立執行該function的儲存過程procedure

create or replace procedure test_tofile

as l_rows number;

l_filename varchar2(100);

v_sql varchar2(100);

l_temp varchar2(100);

begin

v_sql := 'select to_char(sysdate,''yyyymmdd'') from dual';

execute immediate v_sql

into l_temp;

l_filename := 'dbperform_'|| l_temp || '.txt';

l_rows := tofile( 'select fs.tablespace_name tablespace_name,

df.totalspace tablespace_total_size,

(df.totalspace - fs.freespace) mb_used,

fs.freespace mb_free,

round(100 * (fs.freespace / df.totalspace),2) pct_free

from

(select tablespace_name, round(sum(bytes) / 1048576) totalspace from dba_data_files group by tablespace_name ) df,

(select tablespace_name, round(sum(bytes) / 1048576) freespace from dba_free_space group by tablespace_name ) fs

where df.tablespace_name = fs.tablespace_name(+)

order by pct_free asc',

',', 'dir', l_filename );

dbms_output.put_line(l_rows);

end;

/*這裡的'dir'指明了directory dir,不過,由於是在windows環境,需要大寫該directory名*/

4 呼叫該儲存過程

sql>exec test_tofile();

Oracle SQL語句執行步驟

oracle中sql語句執行過程中,oracle內部解析原理如下 1 當一使用者第一次提交乙個sql表示式時,oracle會將這sql進行hard parse,這過程有點像程式編譯,檢查語法 表名 欄位名等相關資訊 如下圖 這過程會花比較長的時間,因為它要分析語句的語法與語義。然後獲得最優化後的執行...

常用oracle sql語句

建立表空間 alter tablespace nm offline drop tablespace nm including contents and datafiles drop user nmcascade create tablespace nm datafile 1 size 500m au...

Oracle SQL語句優化

1,建表時 1 建立主鍵 2 建立索引 3 如果表資料量很大考慮建立分割槽 4 可以使用number型別的就不適用varchar2,這是因為引擎在處理查詢和連線時會逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了。2,建立索引注意事項 1 首先應考慮在 where 及 order by...