参数的模式及约束
上一篇 /
下一篇 2008-05-04 11:43:30
/ 个人分类:PL/SQL
通常情况下,我们在定义过程的时候过程中声明的参数为形参(形式参数),而在调用过程时传递给过程的参数为实参(实际参数)。可以这么认为实参是在过程的调用过程中将要使用的取值,包括传递进过程的值和传递出过程的值。而形参只是实参的一个占位符。形参有三种模式IN、OUT和IN OUT。
IN:模式为IN的形参只是将实参传递进过程内部,在过程的执行过程中它是不能被改变的,是只读的。直到过程结束实参的值也不会改变。
OUT:模式为OUT的形参,在过程的执行过程中模式为OUT的形参主要任务是被赋予值。当过程结束的时候,控制会返还给调用过程的环境,形参的内容同时被赋给实参,返回给调用过程的环境一个值。
IN OUT:可以说是上两种模式的组合。它可以将实参传递进过程。在过程的内部,形参可以被读取也可以被写入。和OUT模式一样当过程结束的时候,形参的内容同时被赋值 给实参。
eg:
create or replace procedure proce_test
(paramin IN varchar2,paramout OUT varchar2,paraminout IN OUT varchar2)
as
varparam varchar2(28);
begin
/*下面的赋值语句是合法的,因为IN参数本身就是将实参带入过程内部的*/
varparam := paramin;
/*下面的语句是非法的,因为IN参数本身只是将实参带入过程内部的,是只读的,他不能接受赋值*/
/*
paramin :='这是In参数';
*/
/* 下面的语句是合法的,因为在过程内部OUT参数主要是接受赋值。并且如果过程中包含OUT参数必须要给出OUT参数赋值*/
paramout := '这是OUT参数';
/* 下面的语句虽然不是非法的,但是在过程内部OUT参数主要是赋值尽量不要用它来传递参数,如果必须,则用IN OUT 参数 */
varparam := paramout;
/*下面两句诗合法的,因为在过程内部IN OUT参数既可以被赋值也可以传递变量*/
varparam := paraminout;
paraminout :='这是IN OUT 参数';
end;
/
Procedure created
参数为OUT 类型的过程的调用:
CREATE OR REPLACE PROCEDURE error_handle
(x NUMBER,y NUMBER, z OUT NUMBER) AS
BEGIN
z:=x/y;
EXCEPTION --异常处理从这里开始
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('不能被0除,请重新输入值');
z := -1;
END;--异常块到这里结束
调用:
declare
zout number;
BEGIN
error_handle(1,0,zout);
end;
个人认为:out与in参数的区别,就是out参数不需要输入具体值,而in参数必须要输入具体值
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: