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文件,如图: