需求:
需要將oracle資料庫中的乙個表匯出為csv檔案,但是表比較大,共有29488763條資料,不能通過簡單的plsql查詢在轉成csv檔案的方法,該錶匯出的dmp檔案,約有2.3g,匯出的csv檔案有3.4g。
解決思路:
寫乙個儲存過程,把sql查詢出來的結果使用格式轉換的方式轉換成csv格式的檔案。
如下:----oracle中表資料行數過多匯出為csv檔案的方法如下:
---登入system使用者
---建立匯出csv方法的儲存過程,system使用者下執行
create or replace procedure sql_to_csv
( p_query in varchar2,
p_dir in varchar2,
p_filename in varchar2
) is
l_output utl_file.file_type;
l_thecursor integer default dbms_sql.open_cursor;
l_columnvalue varchar2(4000);
l_status integer;
l_colcnt number := 0;
l_separator varchar2(1);
l_desctbl dbms_sql.desc_tab;
p_max_linesize number := 32000;
begin
--open file
l_output := utl_file.fopen(p_dir, p_filename, 'w', p_max_linesize);
--define date format
execute immediate 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''';
--open cursor
dbms_sql.parse(l_thecursor, p_query, dbms_sql.native);
dbms_sql.describe_columns(l_thecursor, l_colcnt, l_desctbl);
--dump table column name
for i in 1 .. l_colcnt loop
utl_file.put(l_output,l_separator || '"' || l_desctbl(i).col_name || '"');
dbms_sql.define_column(l_thecursor, i, l_columnvalue, 4000);
l_separator := ',';
end loop;
utl_file.new_line(l_output);
--execute the query statement
l_status := dbms_sql.execute(l_thecursor);
--dump table column value
while (dbms_sql.fetch_rows(l_thecursor) > 0) loop
l_separator := '';
for i in 1 .. l_colcnt loop
dbms_sql.column_value(l_thecursor, i, l_columnvalue);
utl_file.put(l_output,
l_separator || '"' ||
trim(both ' ' from replace(l_columnvalue, '"', '""')) || '"');
l_separator := ',';
end loop;
utl_file.new_line(l_output);
end loop;
--close cursor
dbms_sql.close_cursor(l_thecursor);
--close file
utl_file.fclose(l_output);
exception
when others then
raise;
end;
/---建立匯出目錄,該目錄為oracle資料庫所在伺服器或者主機目錄。
create or replace directory out_path as 'd:\';
---為system使用者賦予匯出目錄out_path的讀寫許可權
---登入sys使用者,或者其他dba使用者
grant read,write on directory out_path to system;
----登入system使用者,執行匯出操作(總共執行約40分鐘)
exec sql_to_csv('select * from llsj.dw_gs_sfztxcl','out_path','dw_gs_sfztxcl.csv');
Oracle連線數過多釋放機制
sqlplus nolog 開啟sqlplus connect as sysdba 使用具有dba許可權得使用者登陸oracle show parameter resource limit 顯示資源限定是否開啟,value為true是開啟,為false是關閉 alter system set res...
Sybase資料庫連線數過多問題
我們的開發團隊增加到10多人後,由於共享乙個資料庫,導致先連線上的能連上,後連線上的就連線不上了,經過上網搜尋相關資料,由於 sybase 預設的連線數只有 20個,需要設定多一些連線數,在 sybase 資料庫設定中選擇 number of remote connections 和 number ...
資料庫連線數過多,頁面打不開
當使用者收到鏈結數告警時,意味著連線數即將達到該例項的上限。如果例項的連線數超過了例項規定的連線數,將無法建立新的連線,這個時候會影響使用者的業務 mysql 的連線通常是乙個請求占用乙個連線,如果該請求 update,insert,delete,select 長時間沒有執行完畢,則會造成連線的堆積...