存储过程中的inout参数

[复制链接]
查看11 | 回复5 | 2007-4-25 04:02:08 | 显示全部楼层 |阅读模式
存储过程中的inout类型参数和其他2类参数到底区别在哪里呢?既然inout既可以传入,又可以传出,为什么不全都用inout类型?
还有一点是如果我在后台用java调用存储过程的话,参数设定部分应该如何写呢?
例如
create or replaceprocedure test_procedure
(
para1 in out varchar2
)
is
begin
.............
end;
在后台java部分中{call trigger test_procedure(?)}时
这个参数该如何设定?
setString(1,"XX")?
然后 types.VARCHAR
再然后getString(1)?
望各位高手帮忙解答下,主要就是不明白什么情况下用到了inout类型的参数
还有后台是如何针对这同以个参数进行压入和获得值的。
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
在补充一个问题
就是存储过程中的参数是否可以设置默认值?
如何设置,能给出一个简单的小例子最好了,还有后台用JAVA调用的时候有什么需要注意的地方吗?
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
你基础还不会啊,就直接做应用,这怎么可以呢?java中参数没有默认值,c++有,pl/sql也有,in,in out,out这三者是有区别的,你难道把参数的模式定义成in和in out,oracle后者肯定做了更多的额外工作,这当然要消耗资源什么的了。
建议看oracle官方文档introdution to pl/sql,关于java调用存储过程传参问题有JDBC规范的,先弄懂基本的,然后看jdbc规范就ok了
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
形式参数可以有三个模式:in、out、in out(oracle8i 添加了nocopy修饰符)。
若没有指定形式参数模式,其缺省方式为in。
方式
描述
------------------------------------------------------------------------------------
in 当过程被调用时,实际参数的值被传递给过程。在过程内,形式参数起着PL/SQL常数
的作用--它被认为是只读的,不能被改变。当过程结束,控制返回到调用环境时,
实际参数没有被改变
out当过程被调用时,实际参数的任何值都被忽略。在过程内,形式参数起着初始化的
PL/SQL变量的作用,因此有一个null值。它可以被读出,也可以被写入。当过程结束
,控制返回调用环境时,形式参数的内容被赋予给实际参数(nocopy引用调用不同)
in out 这种方式时in和out方式的组合。当过程被调用时,实际参数的值被传递给过程。在
过程内部,形式参数起着一个已初始化变量的作用,可以被读出和写入。当过程结束
,控制返回到调用环境时,形式参数的内容被赋值给实际参数(nocopy引用调用不同)
------------------------------------------------------------------------------------
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
子程序参数可以使用两种方式中的任意一种进行传递:或通过引用,或通过数值。
当参数通过引用进行传递时,实际参数的指针被传递到相应的形式参数。
相反,当参数通过数值传递时,该参数从实际参数中被赋值到了形式参数中。
引用传递的速度更快,因为它不用复制。
这对于集合参数尤其有好处,因为它们占据很大的空间。
缺省情况下,PL/SQL将通过引用来传递in参数,而通过数值来传递in out和out参数。
这样做是为了保留异常语义,对实际参数的约束就可以被检验。
使用nocopy
oracle8i包含一个叫做nocopy的编译器暗示。
以这个暗示声明参数的语法:
parameter_name [mode] nocopy datatype
其中,parameter_name是参数的参数名,mode是参数模式(in,out,in out),datatype是参数的数据类型。
若存在nocopy,PL/SQL编译器将试图通过引用传递参数,而不是通过数值传递。
nocopy是一个编译器线索,而非一个指令,因此它并不总是被采用。
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
感谢上面朋友们的回答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行