pl/sql存储过程写法

过程使用CREATE OR REPLACE PROCEDURE语句创建,使用CREATE OR REPLACE PROCEDURE语句简化语法如下:

[(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创建成功截图:

在这里插入图片描述

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

/*
过程使用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;  

声明并调用存储过程实例源码:

/*
在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;

在这里插入图片描述
运行结果截图:
在这里插入图片描述
附加:
2)存储过程的处理部分
一个PL/SQL块,该块包含定义部分、可执行部分以及异常处理部分,其中可执行部分是必须有的。
CREATE OR REPLACE 过程名
(
–参数定义部分
)
IS
–局部变量定义部分
BEGIN
–可执行部分
EXCEPTION
–异常处理部分
END 过程名;

.2存储过程的参数
1)参数的数据类型
在定义一个存储过程参数时,不能指定CHAR类型和VARCHAR2类型形参的长度,也不能指定NUMBER形参的精度和标度。这些约束有实参来传递。

CREATE OR REPLACE PROCEDURE proc_auths(
    --参数定义了类型长度,这将产生编译错误。
    p_code IN OUT VARCHAR2(6),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值