將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...