oracle匯出儲存過程sql至檔案
專案部署時,需要遷移儲存過程,利用工具匯出過程sql,只是按照順序匯出,不能體現依賴關係,不能一次執行成功,比較麻煩。通過user_source、dba_source、all_source查詢oralce資料庫物件sql語句,並匯出至檔案。自己動手,當然知道那些是依賴關係,一次麻煩,以後方便。
1、all_source
可以看到資料庫物件的sql,方便我們分析問題,因為有些物件屬於系統物件。
select name, line, text
from user_source
where name = '&name'
and line >= 10 and line < 30
order by line;
2、使用記錄表
oracle 資料庫將管理記憶體區分為系統全域性區 sga、程式全域性區 pga、使用者全域性區 uga;記錄表之類的集合型別在處理時以管道的形式從程式全域性區 pga 中讀取資料;
游標是以集合的方式從全域性區 sga 中讀取資料;這樣在資料處理時,游標就比記錄表多了一些中間環節,使用記錄表要比游標在速度上提高2~4倍,但由於記錄表對系統的記憶體要求較高,當單列資料長度過大時,建議不使用記錄表。 本例使用記錄表來實現。
3、過程**
create or replace procedure px_sys_export_sql( v_owner varchar2 )
astype proc_info_type is
table of user_source.text%type index by binary_integer;
proc_infos proc_info_type;
file_handle utl_file.file_type;
v_str varchar2(4000);
v_sql1 varchar2(1000);
v_sql2 varchar2(1000);
v_sql3 varchar2(1000);
v_cnt number;
v_index number;
begin
v_sql1:='select distinct(name) from all_source where owner = ''' || upper(v_owner) || '''';
execute immediate v_sql1 bulk collect into proc_infos;
file_handle := utl_file.fopen('data_pump_dir','proc.sql','w');
for i in 1..proc_infos.count
loop
v_index :=1;
v_sql2:='select max(line) from all_source where owner=''' || upper(v_owner) || ''' and name=''' || proc_infos(i) || '''';
execute immediate v_sql2 into v_cnt;
while v_index<=v_cnt
loop
v_sql3:='select text from all_source where owner=''' || upper(v_owner) || ''' and name=''' || proc_infos(i) || ''' and line = ' || v_index;
execute immediate v_sql3 into v_str;
v_index:=v_index+1;
utl_file.put(file_handle,v_str);
end loop;
end loop;
utl_file.fclose(file_handle);
commit;
end px_sys_export_sql;
Oracle批量匯出儲存過程
法一 pl sql工具匯出 法二 set echo off set heading off set feedback off spool c documents and settings administrator 桌面 proc.sql 1 用sys使用者等陸的話 select text from...
如何匯出Oracle的儲存過程為Sql語句
oracle中,過程 type 函式等物件的原始碼可以通過user source或dba source查詢 注意觀察查詢結果中,帶有line欄位,表示該段原始碼的行號。所以我們可以通過拼接 create or replace package 拼接查詢結果,生成建立過程 函式等的sql語句,舉例 se...
sql匯出dbf檔案儲存過程
create proc p exporttb tbname sysname,要匯出的表名 cols nvarchar 1000 null,要匯出的表的列名字串,格式 col1,col2,col3 如果沒有給出值,則認為是所有字段 path nvarchar 1000 檔案存放目錄 fname nva...