oracle 存储过程in out inout三种参数模式和PROMPT用法
文章分类:数据库
oracle 存储过程in out inout三种参数模式
oracle过程中定义了in|out|in out3中参数模式,每个参数可以选择其一
in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。
举个例子
create or replace procedure update_price(
p_product_id in NUMBER,
p_factor in NUMBER)
AS
.....
你在引用这个过程的时候给参数传入值
exexute update_price(2,2.5);
这是定义的2个参数就得到了值,in模式下值不能变
out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
in out 表示高参数可以向该过程中传递值,也可以将某个值传出去
简单的说in参数就是传入但存储过程里面处理的参数
out参数就是返回值的参数。
in参数就像c++语言里函数一般的参数那样
而out函数就像c++里函数的引用类型参数一样
不知道我比喻是否正确,请高手指点
create or replace procedure gettest2(stdname in varchar2,p_cursor in out types.mytype)
as
begin
open p_cursor for select * from test where name=stdname;
end;
例如上面的存储过程
stdname是in参数,传进去供查询语句使用
p_cursor是 out参数,返回查询的结果集
--------------------------------------------------------------------------------------------------------------------
oracle 存储过程 in out2009-08-11 16:30
创建过程语法:
create [or replace] procedure procedure_name
[ (argment [ { in| in out }] type,
argment [ { in | out | in out } ] type
{ is | as }
<类型.变量的说明>
( 注: 不用 declare 语句 )
Begin
<执行部分>
exception
<可选的异常处理说明>
end;
l 这里的IN表示向存储过程传递参数,OUT表示从存储过程返回参数。而IN OUT 表示传递参数和返回参数;
l 在存储过程内的变量类型只能指定变量类型;不能指定长度;
l 在AS或IS 后声明要用到的变量名称和变量类型及长度;
l 在AS或IS 后声明变量不要加declare 语句。
例1.
CREATE OR REPLACE PROCEDURE ModeTest (
p_InParameter IN NUMBER,
p_OutParameter OUT NUMBER,
p_InOutParameter IN OUT NUMBER) IS
v_LocalVariable NUMBER;
BEGIN
/* 分配 p_InParameter 给 v_LocalVariable. */
v_LocalVariable := p_InParameter; -- Legal
/* 分配 7 给 p_InParameter. 这是非法的,因为声明是IN */
p_InParameter := 7; -- Illegal
/* 分配 7 给 p_InParameter. 这是合法的,因为声明是OUT */
p_OutParameter := 7; -- Legal
/* 分配 p_OutParameter 给 v_LocalVariable.这是非法的,因为声明是OUT */
v_LocalVariable := p_outParameter; -- Illegal
/* 分配 p_InOutParameter 给 v_LocalVariable. 这是合法的,因为声明是IN OUT */
v_LocalVariable := p_InOu