创建过程

过程使用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关键字用于创建一个独立的程序。

窗口截图:

PL/SQL存储过程操作实例及其讲解说明_PL/SQL存储过程使用

该存储过程是查找数组中最大值,并输出,输入参数int_varray是创建的整型数组,创建语法如下:

create or replace type int_varray as table of int;

int_varray创建成功截图:

PL/SQL存储过程操作实例及其讲解说明_PL/SQL存储过程使用_02

单独的存储过程实例源码:

-- 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;

窗口截图:

PL/SQL存储过程操作实例及其讲解说明_PL/SQL存储过程传入数组_03

运行结果截图:

PL/SQL存储过程操作实例及其讲解说明_PL/SQL存储过程使用_04