本实例教程为我参照文本文档融合实践活动所写,原創。
26.1建立做实验的表及数据信息
createtableemp_lyas
select*fromemp;
表明:留意拷贝表结构及数据信息并不是sqlserver里边的英语的语法select*intoemp_lyfromemp,这在oracle里边难以实现,自然假如仅复制结构得话应用
createtableemp_lyas
select*fromemp
where1<>1;
就可以。
26.2建立一个存储过程用于做实验
createorreplaceprocedureSal_raise(emp_nonumber,shuliangnumber)
as
begin
updateemp_lysetsal=sal+shuliangwhereempno=emp_no;
end;
/
表明:一定不可以少beginend;这两个关键词,要不然建立存储过程会出现提醒
Warning:Procedurecreatedwithcompilationerrors
意思是:警示,存储过程尽管建立了,可是有编译程序不正确。
查询运行错误能够键入SHOWERRORS;
存储过程的申明主要参数种类时不可以带长短,精密度或是范畴,例如这一存储过程emp_nonumber这一主要参数,就不可以申明为emp_nonumber(4),同样,varchar2做为主要参数的种类是能够的,可是以varchar2(10)做为主要参数种类是不好的。
在sqlplus里边建立存储过程,最后一个反斜杠不可以少,它是告知c语言编译器运作这一PL/SQL块,可是在pl/sqldeveloper的SQLWindow建立则不用这一反斜杠,挑选键入的编码按F8键实行就可以,缺陷是编译程序错误不容易提醒。
26.3启用存储过程
A.在存储过程或是触发器原理中启用存储过程
应用存储过程名和主要参数就可以,例如Sal_raise(7369,200);
B.从互动式oracle专用工具中启用存储过程
在sqlplus中启用,能够应用密名块的方法启用,如
begin
Sal_raise(7369,200);
end;
/
还能够应用EXECUTE或是CALL的英语的语法启用,如
executeSal_raise(7369,200);
callSal_raise(7369,200);
特别注意的是,在sqlplus中实行完后,要是没有键入确立的commit;指令数据信息是不容易具体写到表的,可是在SQLWindow对话框中只有根据
begin
Sal_raise(emp_no=>7369,shuliang=>200);
end;
方法启用存储过程,并且实行結果不用键入commit;指令也会立即载入表。
26.4传到存储过程主要参数的三种方式:
ExecuteSal_raise(7369,200);
ExecuteSal_raise(shuliang=>200,emp_no=>7369);
executeSal_raise(7369,shuliang=>200);
第一种为常见方式,传到主要参数次序和存储过程申明主要参数次序一样
第二种为主要参数名字和变量值一一对应法,可以不依照存储过程申明主要参数次序传到。
第三种为混合法,规定沒有主要参数名字的值要写在前面,还必须依照申明主要参数的次序才行,例如executesal_raise(200,emp_no=>7369);便是不好的。
26.5查询存储过程编码
假如查询存储过程的使用者,建立時间,是不是合理等信息内容能够应用以下句子:
select*fromall_objectswhereobject_name='SAL_RAISE';
假如要查询存储过程的编码,则能够应用以下编码:
selecttextfromall_sourcewherename='SAL_RAISE'orderbyline;
请一定留意的是:上边着2个sql要有纪录回到,一定要将存储过程的姓名所有用英文大写,不然会沒有纪录回到。
26.6带輸出主要参数的存储过程
略微更新改造下变成带輸出主要参数的存储过程:
createorreplaceprocedureSal_raise(emp_nonumber,shuliangnumber,sal_nowoutnumber)
as
begin
updateemp_lysetsal=sal+shuliangwhereempno=emp_no;
selectsalintosal_nowfromemp_lywhereempno=emp_no;
end;
启用方式和没有輸出主要参数的存储过程类似,只不过是必须申明一个适合种类的自变量来接受輸出主要参数罢了。
setserveroutputon;--关键用以后边的DBMS_OUTPUT要显示信息結果
declaresal_nownumber;
begin
Sal_raise(7369,200,sal_now);
DBMS_OUTPUT.PUT_LINE(TO_CHAR(sal_now));
end;
26.5删掉存储过程
DROPPROCEDURESal_raise
参照文本文档:
1.ApplicationDeveloper’sGuide–FundamentalsSQLReference
2.SQLReference