ORACLE存储过程简明教程

本实例教程为我参照文本文档融合实践活动所写,原創。

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


转载请说明出处内容投诉
八爷源码网 » ORACLE存储过程简明教程