sqlplus導出存儲過程
『壹』 如何導出ORACLE指定存儲過程
1、要想連接到一個資料庫,先得配置一個tnsnames.ora文件。路徑位於 【XX】/NETWORK/ADMIN/tnsnames.ora。【XX】視具體情況而定。
截圖中紅框標記的地方需要改成你需要連接的資料庫的信息。
注意事項
若出現亂碼,可能需要將編寫的sql文件轉換為utf-8格式。
若提示無法創建spool文件,請確保目錄C:/EXP/DDL存在,或者指定新的路徑。
『貳』 oracle sql/plus中執行存儲過程
因為有輸出參數,所以只能通過declare塊執行,如下:
declare
聲明變數,就是CodeType 、input_code、cu_patient ,可對前兩個直接賦值
begin
GetSampleInfo(CodeType, input_code,cu_patient) ;
end;
/
----
多動動手!如果沒輸出參數可以直接"exec 過程名(參數)"調用,否則就按我說的做,自己往裡添加代碼就行
『叄』 oracle9i 中exp/imp 語句能否實現只導入或者導出部分表,或者部分存儲過程等等
可以使用expdp 和 impdp 這對備份恢復命令,
前提是你的oracle帳戶必須有物理文件的read和write許可權.
如果有許可權,就直接expdp和impdp,成功後有一個mpfile.log 和mpfile.dmp 把dmp復制過去就可以直接impdp 了.
具體的可以給個參考:
--導出
SQL>create directory mp_dir as 'f:\bak'; ---DBA用戶,確定備份文件放哪裡(已經存在的目錄)?
SQL>grant read,write on directory mp_dir to scott; --賦予scott用戶的讀寫許可權
C:>expdp scott/tiger directory=mp_dir [mpfile=mybackup.dmp] [tables = emp,dept] --mpfile設置備份文件名 tables 需要導出那些表[tab1,tab2,....]
--導入
C:>impdp scott/tiger directory = mp_dir mpfile = mybackup.dmp tables = [表名1,表名2 ...]
SQL>是 在sqlplus下操作的, C:>是在系統命令行上操作
『肆』 sqlplus中怎麼執行帶參數的存儲過程
SQL> create or replace procere jl_test
2 (a in varchar2,b out varchar2)
3 as
4 begin
5 b:= a;
6 end;
7 /
SQL> var c varchar2(10);
SQL> exec jl_test('01',:c)
PL/SQL 過程已成功完成。
SQL> print c
C
--------------------------------
01
『伍』 oracle 11g expdp 可以導出存儲過程嗎
從oracle
12c
備份(expdp)出來的包,還原到11g里,想想都知道會有兼容性問題。
果不其然,報錯了:
ora-39142:
版本號
4.1
(在轉儲文件
「叉叉叉.expdp」
中)
不
兼容
之類
後來才知道,在12c中備份出來時,應指定版本信息,例如我要導進11g的庫(具體版本為11.1.0.6.0,打開sqlplus就能看到),則version=11.1.0.6.0
語句:
在12c備份
?
1
expdp
system/password@sid12c
directory=dbbak
mpfile=20160321.expdp
logfile=20160321.log
schemas=leftfist
version=11.1.0.6.0
在11g中還原
?
1
impdp
s
『陸』 Oracle批量導出存儲過程(保持每個存儲過程獨立)
略微復雜,需要存儲過程實現。
1、創建輸出路徑,比如你要在d盤test目錄下輸出,你就先在d盤根目錄下建立一個test的目錄。
2、sqlplus下以sysdba登錄,執行以下語句
createorreplacedirectoryTMPas'd: est';
grantread,writeondirectoryTMPtoscott;--比如我用的scott用戶
altersystemsetutl_file_dir='d: est'scope=spfile;
3、以上步驟執行完,需要重啟資料庫。
4、創建一個存儲過程,代碼如下(基本是不用改動,原封復制即可):
CREATEORREPLACEPROCEDURESP_OUTPUT_PROCEDUREis
file_handleutl_file.file_type;
Write_contentVARCHAR2(1024);
Write_file_nameVARCHAR2(50);
v_namevarchar2(50);
v_textvarchar2(2000);
cursorcur_procere_nameis
selectdistinctnamefromuser_sourcewheretype='PROCEDURE';
cursorcur_sp_outis
selectt.text
from(select0line,'CREATEORREPLACE'text
fromal
union
selectline,text
fromuser_source
wheretype='PROCEDURE'
andname=v_name)t
orderbyline;
begin
opencur_procere_name;
loop
fetchcur_procere_name
intov_name;
exitwhencur_procere_name%notfound;
write_file_name:=v_name||'.txt';
opencur_sp_out;
loop
fetchcur_sp_out
intov_text;
exitwhencur_sp_out%notfound;
file_handle:=utl_file.fopen('TMP',write_file_name,'a');
write_content:=v_text;
--writefile
IFutl_file.is_open(file_handle)THEN
utl_file.put_line(file_handle,write_content);
ENDIF;
--closefile
utl_file.fclose(file_handle);
endloop;
closecur_sp_out;
endloop;
closecur_procere_name;
end;
5、創建完畢執行存儲過程,這個就不贅述了,執行完畢後,你會發現d盤test目錄下的文件名就是以存儲過程名命名的txt文件,如圖: