Win2003+Vs2003+Oracle9.0 建立Oracle的存储过程,如果有参数,不论是in或者out类型的,都不能够指定参数的大小,理由很简单,无法判断。 建立过程:
Create or replace procedure procedure_test(inpara1 in varchar2 , inpara2 in varchar2 ) as begin .. end procedure_test; / 我们无法预知procedure_test的调用者传参数时,inpara1,inpara2的长度会是多少。 如果使用Ado.Net ,用OleDbCommand调用这个过程,那么必须指定对应inpara1,inpara2的OleDbParameter的长度。 即使参数类型是out 的,也必须指定长度,曾经看O'Reilly的Ado.Net in a Nullshell一书,在讲调用out类型参数的过程时,所举的例子的参数为Int 型,没有再显示指定参数长度Size,当时误以为对于out类型的无须指定,但是在实际应用中,对于字符型参数,如果没有长度,会报0Size的错误,必须显示指定Size,才可以调用过程;而对于Int类型的,都有自己的默认长度吧。 附调用参数为out类型的函数:
}
附O'Reilly的例子: 过程:
CREATE Procedure CustomerAdd ( @FullName nvarchar ( 50 ), @Email nvarchar ( 50 ), @Password nvarchar ( 50 ), @CustomerID int OUTPUT ) AS INSERT INTO Customers ( FullName, EMailAddress, Password ) VALUES ( @FullName , @Email , @Password ) SELECT @CustomerID = @@Identity GO Ado.Net 调用:
using System; using System.Data; using System.Data.SqlClient; public class AddCustomer }
相关文章: