参数的模式及约束

上一篇 / 下一篇  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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-10-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 94
  • 日志数: 5
  • 建立时间: 2008-04-30
  • 更新时间: 2008-05-07

RSS订阅

Open Toolbar