创建过程
过程使用CREATE OR REPLACE PROCEDURE语句创建,使用CREATE OR REPLACE PROCEDURE语句简化语法如下:
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] {IS | AS} BEGIN < procedure_body > END procedure_name;
这里,
procedure-name 指定的程序的名称
[OR REPLACE] 选项允许修改现有的程序
可选的参数列表中包含的名称,模式和类型的参数。IN表示该值将被从外部传递,OUT表示该参数将被用于从过程返回一个值到外面
procedure-body 包含可执行部分
AS关键字来代替了IS关键字用于创建一个独立的程序。
窗口截图:
该存储过程是查找数组中最大值,并输出,输入参数int_varray是创建的整型数组,创建语法如下:
create or replace type int_varray as table of int;
int_varray创建成功截图:
单独的存储过程实例源码:
-- Created on 2018/3/29 by E.WANG /* 过程使用CREATE OR REPLACE PROCEDURE语句创建,使用CREATE OR REPLACE PROCEDURE语句简化语法如下: CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] {IS | AS} BEGIN < procedure_body > END procedure_name; 这里: procedure-name 指定的程序的名称 [OR REPLACE] 选项允许修改现有的程序 可选的参数列表中包含的名称,模式和类型的参数。 IN表示该值将被从外部传递,OUT表示该参数将被用于从过程返回一个值到外面。 procedure-body 包含可执行部分 AS关键字来代替了IS关键字用于创建一个独立的程序。 */ --求数组中的最大值并输出 create or replace procedure MaxOfVarray(valueList in int_varray,z out int) as tmpResult int:=0; begin for x in 1..valueList.count loop if valueList(x)>=tmpResult then tmpResult:=valueList(x); end if; end loop; z:=tmpResult; end;
声明并调用存储过程实例源码:
-- Created on 2018/3/29 by E.WANG /* 在Oracle的存储过程和函数中,其实IS和AS是同义词,没有什么区别。 还有在自定义类型(TPYE)和包(PACKAGE)时,使用IS和AS也并没有什么区别。 但是在创建视图(VIEW)时,只能使用AS而不能使用IS。 在声明游标(CURSOR)时,只能使用IS而不能使用AS。 */ declare one int; two int; three int; --定义一个整型数组 numlist int_varray; --声明并定义存储过程MaxOfTwo --找出两个数中的最值并输出该值 procedure MaxOfTwo(x in int,y in int,z out int) as begin if x>y then z:=x; else z:=y; end if; end; begin numlist:=int_varray(12,2,56,75,24); --调用存储过程MaxOfVarray MaxOfVarray(numlist,three); dbms_output.put_line('The max of int_varray(12,2,56,75,24): '|| three); --给变量one、two、three赋值 one:=10; two:=20; --调用存储过程MaxOfTwo MaxOfTwo(one,two,three); dbms_output.put_line('The max of (10,20): '|| three); end;